SSH 远程登录

ssh远程登录连接

ssh 登录方式

1. ssh密码登录:

  • 客户端连接上服务器之后,服务器将自己的公钥传输给客户端
  • 客户端输入服务器密码,用公钥加密之后传输给服务器
  • 服务器根据自己的私钥解锁密码,如果密码正确就让客户端登录

2. 公钥认证登录:

一定要明白客户端与服务器之间的连接是通过公钥和私钥实现认证登录的。
客户端相当于A端,服务器相当于B端。A、B要实现相互认证就要通过一组公私钥。
(1)客户端即A端生成RSA公钥和私钥。
在~/.ssh文件夹下,通过ssh-keygen -t rsa命令生成一组公私钥。Id_rsa为私钥,id_rsa.pub为公钥
(2)客户端将自己的公钥存放在服务器。在生成了公私钥之后要实现AB两端的交互认证,需要A端保留自己的私钥,然后把公钥存放在B端。
在B端的.ssh目录下会有authorized_keys+know_hosts这两个文件
Authorized_keys用来存放远程免密登录的公钥。
known_hosts用来存放已知的主机公钥清单,作为A端和B端都会自动生成这个文件,每次和远端服务器进行一次免密ssh连接之后就会在这个文件的最后追加对方主机的信息(不重复)
以上通过scp将内容写进对方的文件中
命令: scp -p ~/.ssh/id_rsa.pub root@:/root/.ssh/authorized_keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Scp: secure copy 用于linux下进行远程拷贝文件的命令。
常用命令参数 -p 保留原文件的修改时间,访问时间和访问权限

需要注意的是:
这是文件和目录的权限,要保证能够读写读写的话最低要600
(写权限4,读权限2, 执行权限1. 三个数字分别对应文件所属主用户,文件所属组用户和其他用户)
设置authorized_keys权限 600
设置.ssh目录权限700

如果嫌每次连接的时候很麻烦,我们可以利用ssh的用户配置文件config来管理多个ssh会话。ssh的用户配置文件是放在.ssh文件夹里,配置写法如下
Host 别名
HostName 主机ip, 主机ip可以是保存在/etc/hosts中的名字
Port 端口 (这个可能不用配置)
User 用户名
IdentityFile 密钥文件的路径

两台服务器交互验证的细节如下:
(1)客户端请求连接服务器,服务器将一个随机字符串发送给客户端
(2)客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
(3)服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

1
2
3
4
5
6
7
出现问题:
ssh connection refused 一般来说是因为服务器没有安装ssh服务
如果确认安装,那么大概率是因为断线了
找到/etc/ssh/sshd_config文件。
将ClientAliveInterval 0改为30,表示客户端每隔多少秒向服务器发送一个心跳数据
将ClientAliveCountMax 3改为86400表示客户端多少秒没有响应,服务器自动切断连接。
之后重启sshd服务 service sshd restart

出现的问题

  • client与server0的连接经常中断,但是与server1等其他服务器连接很稳定。因为我使用了桥接网络,所以需要检查是不是server的ip出现了冲突。因为批量操作,一般需要将server和client的ip设置为静态ip,所以经常会出现网络内ip冲突的问题。