ssh登陆笔记📒
ssh的配置
ssh的配置文件在/etc/ssh
下,有两种配置文件,ssh_config和sshd_config。
ssh_config是针对客户端的配置文件,
sshd_config是针对服务端的配置文件。
未安装ssh-server,只有ssh_config文件。?
两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。
每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。
安装ssh-server: apt-get install openssh-server 。
安装完后多了sshd_config这个配置文件。?
ssh公钥认证需要sshd_config中配置,保证前面的#注释去掉:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ssh服务重启的命令各系统不太一致:
service ssh restart //ubuntu
ssh口令登陆
ssh口令登陆的详细过程:
0. 用户在本地机器通过 ssh user@host
命令发起登陆远程主机host的请求
- 远程主机收到用户登录请求,把自己的公钥发给用户。
- 用户使用这个公钥,将登录密码加密后,发送给远程主机。
- 远程主机用自己的私钥,解密登录密码;若密码正确,则同意用户登录。
用户第一次ssh登陆远程主机时,会弹出一串提示。
如:
The authenticity of host 'host (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx...xx.
Are you sure you want to continue connecting (yes/no)?
显示主机的公钥指纹,警告无法确认主机的真实性。让用户确认主机是否是正确的,而不是伪造的。(可能存在"中间人攻击"(Man-in-the-middle attack)风险,详细见末尾的🔗链接。)
用户确认后,远程机器的公钥就会被保存在文件$HOME/.ssh/known_hosts
中。下次再连接这台主机时,系统会识别它的公钥已经保存过了,从而跳过警告部分,直接提示输入密码。
公钥认证
SSH还提供了公钥认证登录,省去了输入密码的步骤。
公钥认证的详细过程:
0. 用户将自己的公钥储存在远程主机上。
- 登录的时候,远程主机会向用户发送一段随机字符串,
- 用户用自己的私钥加密后,再发回来。
- 远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
🌰例子:主机A想要ssh到主机B上。
A上:
- 通过执行
ssh-keygen
生成密钥。
$HOME/.ssh/
目录下,生成两个文件:公钥文件id_rsa.pub
,私钥文件id_rsa
。 - 将公钥送到远程主机B上(授信用户的公钥 保存在登录后用户的
$HOME/.ssh/authorized_keys
文件中。)
可以通过:
- copy公钥文件的内容, 追加到B的 authorized_keys 中。
- 执行命令 ssh-copy-id user@host
- 执行命令 ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
- cat /root/.ssh/id_rsa.pub | ssh root@远程服务器ip 'cat - >> ~/.ssh/authorized_keys'
authorized_keys的权限为600
公钥写入authorized_keys文件后,公钥认证的设置差不多完成了。
一般第一次登陆的时候还是要敲一个enter,后面再登陆就不用密码了。
关于ssh更详尽的原理和用法可以看:
http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html
http://www.361way.com/ssh-public-key/3662.html