利用 public key (公钥文件)进行免密码ssh登录

如何配置免密码登录

  1. 在《PC》上生成公钥/密钥对
    1
    2
    ssh-keygen
    然后一路回车,密码留空
    
  2. 将公钥内容追加到《服务器》上:
    1
    cat your-idid_rsa.pub >> authorized_keys
    
  3. 在《PC》上直接执行 ssh your-name@server-address 即可登录
    • 如果生成公钥密钥时指定了密码,此处要输入公钥密码

Openwrt 上免密登录

openwrt 的 authorized_keys 文件位置为:/etc/dropbear/authorized_keys

1
2
cat your-idid_rsa.pub >> /etc/dropbear/authorized_keys
chmod 600 /etc/dropbear/authorized_keys

可能遇到的问题

root 用户无法登录,《服务器》的sshd禁止root用户登录

  • 解决

修改 /etc/ssh/sshd_config

  1. 把 PermitRootLogin no 改为 PermitRootLogin yes
  2. 重启sshd服务
    1
    service sshd restart
    

cygwin 上 dsa类型的公钥无法登录,总是提示输入密码

  • 原因
  • 解决方法
    • 方法一,设置 ssh 允许 dsa 类型的公密钥(还没试过,以后有空试试~~)
      • 在 ~/.ssh/config 添加
        1
        PubkeyAcceptedKeyTypes +ssh-dss
        
    • 方法二,不使用 dsa 类型,使用 rsa 类型的公密钥

无法登陆,依然提示输入密码

  • 现象

配置了 public key 到服务器的 .ssh/authorized_keys 文件,依然提示输入密码

查看 sshd 日志 /var/log/secure ,提示: Authentication refused: bad ownership or modes for directory /home/the_user_name

  • 原因

sshd 对 $HOME , .ssh, .ssh/authorized_keys 的文件权限有要求

  • 解决方法
1
2
3
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod go-w ~

selinux 导致不能登录

sshd_config 的 PermitRootLogin 设置成yes;.ssh , authorized_keys 权限也都设置,依然不能登录。

1
2
3
4
5
6
7
# ls -laZ ~/.ssh
drwx------. root root unconfined_u:object_r:ssh_home_t:s0 .
drwxr-xr--. root root system_u:object_r:admin_home_t:s0 ..
-rw-------. root root unconfined_u:object_r:admin_home_t:s0 authorized_keys
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 id_rsa
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 id_rsa.pub
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts
  • 原因

authorized_keys 是 root 用户手动创建的,文件的属性不符合 selinux 的安全规则。

  • 解决方法
1
2
3
4
5
6
7
8
9
10
# restorecon -Rv ~/.ssh
restorecon reset /root/.ssh/authorized_keys context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0

# ls -laZ ~/.ssh
drwx------. root root unconfined_u:object_r:ssh_home_t:s0 .
drwxr-xr--. root root system_u:object_r:admin_home_t:s0 ..
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 authorized_keys
-rw-------. root root unconfined_u:object_r:ssh_home_t:s0 id_rsa
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 id_rsa.pub
-rw-r--r--. root root unconfined_u:object_r:ssh_home_t:s0 known_hosts