每次 SSH 或者 SCP 的时候都输入密码一定是一件烦人的事情,一是密码还不一定记得住,二是感觉每次敲一遍密码感觉没那么安全,三是服务器多了就。。。

ssh密码登陆

默认 ssh 从本地连接到服务器是需要输入密码的,而且每次都需要,如果你能忍受的话我表示十二分的佩服
有帮你输入明文密码的命令,比如像:expectsshpass 之类的。但是总感觉不够安全,毕竟密码是明文的

公钥认证

# 生成本机的公钥与密钥(已有秘钥可以跳过),指定 rsa 算法,直接敲3次回车即可
$ ssh-keygen -t rsa

# 上传公钥放到服务器对应账号下
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

上传步骤:

  • 使用 ssh 远程登陆服务器
  • 服务器端:创建 .ssh 文件夹,不存在的话会创建,已存在的不影响
  • 本地:读取本地公钥文件:~/.ssh/id_rsa.pub
  • 服务器端:追加本地公钥到:.ssh/authorized_keys 文件最后一行

注意:
比如这里使用的是 user 账号,那么就只有 user 账号可以免密码登陆
公钥存放的地方为:/home/user/.ssh/authorized_keys,每个账号存储公钥的地方都不一样
root 用户的公钥存储地方是: /root/.ssh/authorized_keys

免密码登陆

# 正常使用 ssh 和 scp 就不需要密码登陆了
$ ssh user@host

如果还是不行的话,可以检查一下:/etc/ssh/sshd_config 文件这几行前面的”#”是否去掉

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

不过注释没有去掉我这里也是可以免密码登陆了

记得重启服务:

# ubuntu系统
$ service ssh restart
# debian系统
$ /etc/init.d/ssh restart

补充

(2018-10-01更新)

如果还是不好使, 那么可以看日志

# 详细日志模式 (额, 好吧, 这个表示看不懂)
$ ssh -vvv root@192.168.7.191
......

# 目标机器的 sshd 日志 
$ tail -200 /var/log/secure | grep sshd
Oct  1 09:04:50 725 sshd[4088]: Authentication refused: bad ownership or modes for directory /private/var/root

啊, 上面就是权限问题导致的了, 检查目标机器相关目录权限:

$HOME : 用户目录 权限为 755 或者 700,就是不能是77x、777

# .ssh 目录权限 (700)
drwx------   2 root root       4096 Apr  9  2015 .ssh

# .ssh 目录下文件的权限 (644 600)
-rw-r--r--   1 root root 1609 Mar  2 14:05 authorized_keys
-rw-------   1 root root 1675 Dec 12  2014 id_rsa
-rw-r--r--   1 root root  405 Dec 12  2014 id_rsa.pub
-rw-r--r--   1 root root 4701 May 25  2016 known_hosts

参考:



blog comments powered by Disqus

Published

24 June 2017

Tags