ssh协议全称为secure shell,是由OpenSSH软件包所提供。作用是让系统可以通过不安全的网络在安全和加密的通道中通信,也就是创建与远程系统的安全连接,能够远程操作系统。
远程登录系统:
ssh 用户名@主机名
ssh -i 私钥文件 用户名@主机名
其中登录用户必须在远程主机上存在,并且你要知晓该用户口令或者密码。当然你如果只是进行简单操作,可以不登录主机,在上述命令后加上想要执行的命令即可。
如果你想查看当前登录系统的用户列表,可以使用:
w
它将显示具体信息,包括登录位置,时间等重要信息。
原理
SSH通过公钥加密的方式保持通信安全。当一个客户端连接到服务器时,服务器会在客户端登录之前发送公钥副本。
当用户使用ssh连接服务器时,它会首先在本地主机上查看是否具有该服务器的公钥副本,如果存在则会进行比对,如果不对就会根据用户选择以及配置确定是否登录。如果登录将会更新本地公钥。
你可以使用ssh-keygen命令来生成自己的公钥和私钥,它们会默认保存在家目录下的.sshd/id_rsa与.sshd/id_rsa。pub文件中。当然你也可以在命令后加-f选项来选择想保存的目录。
然后将你的公钥发送到要远程连接的服务器上,使用如下命令:
ssh-copy-id 用户名@主机名
ssh-copy-id -i 公钥文件 用户名@主机名
之后 你远程登录时,服务器会发送使用你的公钥加密的质询消息,你用自己的私钥解密来作出回应,来确认客户端的身份。这无疑比使用密码的方式更加安全。
同时为了更加安全,你可以使用密钥管理器来管理自己的密钥:
1.启动密钥管理器:
eval $(ssh-agent)
2.添加私钥
ssh-add
ssh-add 自定义私钥文件
之后你只需要输入密钥管理器的密码即可自动读取私钥。
常见配置操作
1.禁止root用户远程登录
在/etc/ssh/sshd_config文件中将PermitRootLogin参数改为no,yes是允许其以root用户登录,prohibit-password或者without-password是root只能通过密钥来验证。
设置完后必须重新加载sshd服务才能完成更改:
systemctl reload sshd
2. 禁止使用密码登录,只能通过私钥
同样在/etc/ssh/sshd_config文件中将PasswordAuthentication参数改为no,并重新加载sshd服务即可。