使用Windows子系统SSH远程Linux服务器

最近被PuTTY掉线掉烦了,决定另寻免费的SSH工具。于是乎想到了Windows 10组件“适用于Linux的Windows子系统”

【开始】-【Windows设置】-【应用】-【程序和功能】

(【控制面板】-【程序】-【程序和功能】)

【启用或关闭Windows功能】

【适用于Linux的Windows子系统】

之后在微软商城里搜索“Linux”,会看到好大的横幅广告,点击获取这些应用,看到Ubuntu、openSUSE、SUSE Linux,挑喜欢的安装即可。

远程连接

ssh clowlido.com -p 20001 -l clowlido -i openssh_key

传输文件

scp -P 20001 clowlido@clowlido.com:/home/clowlido/clowlido.txt /mnt/c/clowlido.txt
scp -P 20001 -i openssh_key /mnt/c/clowlido.txt clowlido@clowlido.com:/home/clowlido/clowlido.txt

传输文件夹

scp -P 20001 -r clowlido@clowlido.com:/home/clowlido/clowlidodir /mnt/c/clowlidodir
scp -P 20001 -i openssh_key -r /mnt/c/clowlidodir clowlido@clowlido.com:/home/clowlido/clowlidodir

使用DNS验证来更新Let’s Encrypt证书!

压着截止日期更新Let’s Encrypt证书,意外失败,之后HTTP验证怎么都无法通过。
去社区一看,有点懵逼,原来人家启用了Failed Validation limit失败验证限制,失败验证绑定IP、域名等。失败的验证一个小时后过期,需要在一个小时内继续验证,否则会被锁定,七天后才能重新验证,且无法解锁。
去翻文档,发现了DNS验证,这玩意简单,给TXT记录指定的字符串即可。

先在服务器上执行

certbot certonly --manual --preferred-challenges dns -d clowlido.com -d www.clowlido.com

按Y确认后。会生成一个域名_acme-challenge.clowlido.com,记录值XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX。
在DNS服务器或域名管理网站的域名解析设置里,新建一条TXT记录【_acme-challenge】,将指定的记录值【XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX】填入即可。

毕竟DNS不需要在服务器上新建文件,不需要搞权限,也不需要访问控制。
缺点是,这种手动更新不支持certbot renew。

附,更新Let’s Encrypt证书失败,导致各种错误。例如:
Attempting to renew cert (clowlido.com) from /etc/letsencrypt/renewal/clowlido.com.conf produced an unexpected error: Failed authorization procedure. clowlido.com (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://www.clowlido.com: Connection reset by peer, www.clowlido.com (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://www.clowlido.com: Connection reset by peer. Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/clowlido.com/fullchain.pem (failure)

An unexpected error occurred:
There were too many requests of a given type :: Error creating new authz :: Too many invalid authorizations recently.

CentOS 7上nginx、php-fpm服务的创建

nginx、php-fpm的安装,我暂时先不写了,满大街的文章,不差我这一个。
创建服务很少有人提及,有人甚至因为不会建服务,用回CentOS 6。

CentOS 7的服务文件放在/usr/lib/systemd/system/下。
文件命名方式为 【服务名】.service

下面服务文件内容注意一下。
1.执行文件的路径也要修改。
2.pid文件所在文件夹记得修改权限。
3.User=clowlido和Group=clowlido,是运行主进程的用户,改成你自己的。
Windows时的习惯,我的所有应用系统的服务都是非root用户启动的。
如果想以root身份启动主进程,把这两个注释掉或移除。

友情提示:非root用户启动的服务,无法使用1024以下的端口,例如80、443。启动服务会报端口相关的错误。
我的解决方法是,在对应程序的conf文件里设置1024以上的端口,再用firewall把80、443转发到对应端口。

创建nginx服务

vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
User=clowlido
Group=clowlido
PIDFile=/app/nginx/logs/nginx.pid
ExecStartPre=/app/nginx/nginx -t
ExecStart=/app/nginx/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建php-fpm服务

vi /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target

[Service]
Type=simple
User=www
Group=www
PIDFile=/app/php/var/run/php-fpm.pid
ExecStart=/app/php/sbin/php-fpm -F -c /app/php/etc/php.ini -y /app/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target

操作指令:

systemctl enable nginx

启用服务

systemctl disable nginx

禁用服务

systemctl daemon-reload

服务文件变动后,重载服务

systemctl start nginx

启动服务

systemctl stop nginx

结束服务

systemctl restart nginx

重新启动服务

systemctl status nginx

查看服务状态

systemctl status nginx -l

查看服务状态详细信息(多用这个吧)

CentOS 7 ssh远程登录停用密码认证,使用密钥认证

这休假和上班没什么区别啊,电话不断。
忙里偷闲,记录一下如何不用密码,用自己生成的密钥ssh登录服务器。

一、密钥生成
密钥分为公钥和私钥,公钥传到服务器上,私钥自己留着,私钥可以加密码。
但是,如果私钥加了密码,每次登陆时均需要输入密钥密码。
密钥类型建议从RSA、ECDSA、ED25519选择,长度256起步看需求。

以Xshell为例,上方菜单的工具,新建用户密钥生成向导。
全程都是中文提示,到“请输入给用户密钥加密的密码”,认证考虑要不要设置密码。
设置密码更安全,但是每次连接不输入服务器用户的密码,输入密钥的密码。
不设置的话,每次登录更方便,但是安全性就降低了。

新建密钥后,公钥、私钥的保存。可以Xshell菜单的工具,用户密钥管理者,进行管理。
公钥:选中密钥,右边的属性,公钥,保存为文件。
私钥:选中密钥,右边的导出。

二、ssh的配置更改

mkdir /home/clowlido/.ssh

在clowlido用户目录下新建一个.ssh文件夹

cd /home/clowlido/.ssh

进入.ssh文件夹

通过rz或xftp将公钥传到服务器上

mv ./clowlido.com.pub ./authorized_keys
chown clowlido:clowlido ./authorized_keys
chmod 600 ./authorized_keys

修改ssh设置,开放公钥认证

vi /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
systemctl restart sshd

先测试一下,是否可以使用密钥登录。

测试通过后,禁用密码认证,以后就只用密钥登录了。

vi /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart sshd

CentOS 7创建新用户及ssh安全登录配置

一、新建一个用于ssh登录的用户

adduser clowlido

创建新用户clowlido。

passwd clowlido

为clowlido设置密码。

二、限制可以切换到root的用户
仅允许wheel组的用户切换到root。

vi /etc/pam.d/su
auth required pam_wheel.so use_uid

去掉上面这行前面的#。

vi /etc/login.defs
SU_WHEEL_ONLY yes

在文末添加这行。

gpasswd -a clowlido wheel

把新用户clowlido加入wheel组。

lid -g wheel

查询所有wheel组的用户。

到这里可以从root下,切换到clowlido,然后测试sudo和su -l是否正常。

su clowlido

切换到新建的clowlido用户

sudo ls

测试sudo是否有效,输入root密码后,如果执行了ls,为正常。

su -l

切换到root,输入root密码后,切换root的login shell,为正常。

三、配置ssh使用自定义端口
目标是要禁止root及其他用户远程登录,但是首先要确定使用新建的clowlido用户可以通过ssh登录。
如果你没测试就禁用了root,之后发现所有用户都无法登录,就太欢乐了。
VPS还好,有Console或VNC。实体机只能跑去机房本地操作。

断开现有ssh连接或新建连接,确认clowlido可以通过ssh登录。

su -l

登录后切换到root继续操作。

vi /etc/ssh/sshd_config

修改ssh协议版本和端口号。

Protocol 2

使用sshv2协议。

Port 20001

修改ssh端口为20001。

firewall-cmd --permanent --zone=public --add-port=20001/tcp

防火墙开放新ssh端口20001。

firewall-cmd --reload

防火墙重载,使配置生效。

systemctl restart sshd

重启sshd服务。

确认clowlido可以ssh新端口20001登录。登录后切换到root继续操作。

su -l

关闭原来ssh默认的22端口。

firewall-cmd --list-ports

查看是否开启了22端口。

firewall-cmd --permanent --remove-port=22/tcp

如果看到22的话,移除端口。

如果没有看到22的话,估计是开放的服务。

firewall-cmd --list-services

查看firewall开放的服务。
看到ssh的话,就确认是服务了。

vi /usr/lib/firewalld/services/ssh.xml

修改firewalld的ssh.xml。

<port protocol="tcp" port="20001"/>

将端口改为新端口20001。

firewall-cmd --permanent --zone=public --remove-port=20001/tcp

因为使用服务,所以把之前添加的端口移除。

firewall-cmd --reload

防火墙重载,使配置生效。

接下来对登录用户进行限制。

vi /etc/ssh/sshd_config

增加下面两条。

PermitRootLogin no

禁止root远程登录,VPS控制台或本地可以登录。

AllowUsers clowlido

放最后即可,仅允许clowlido用户登录。

systemctl restart sshd

重启sshD服务。
结束。