之前文章 SSH 采用密钥替代密码登录的方法和步骤 http://www.weizhiyong.com/archives/835 中介绍了 SSH 时采用密钥代替密码登录的基本方法和步骤, 但在实际操作中, 可能还会遇到一些其他的困难和问题, 本文就 SSH 方式登录远程服务器的要点和步骤进一步归纳整理, 以提供具体可操作步骤. SSH 是远程登录 Linux 服务器的常用方式, 因此, 为了实现本文内容, 需要有一台 Linux 系统的服务器和一台客户机(本文客户机是 Opensuse Linux 系统, 在 Windows 和 Mac 下实现方式可能略有不同).
1. 密钥对生成
所谓密钥对, 可以理解为钥匙和锁, 公钥就是锁, 挂在墙上谁都能看到, 私钥就是钥匙, 只能拿在自己手中. 一把钥匙开一把锁, 因此密钥总是成对出现的. 在 Linux 系统下, 可以使用 SSH-keygen -t rsa 命令生成密钥, 这里 - t rsa 指的密钥类型, 默认长度 2048 位, 也可以通过 - b 4096 修改长度(比如 4096 位).
生成 SSH Key 的过程中会要求你指定一个文件来保存密钥, 按 Enter 键使用默认的文件就行了.然后需要输入一个密码来加密你的 SSH Key.SSH 密钥会保存在当前用户主目录 home 下的. SSH/id_rsa 文件中.SSH 公钥保存在. SSH/id_rsa.pub 文件中.(如果在命令前面加 sudo, 则可能放在 root 用户目录下, 一般不建议). 如果要将生成的密钥对备份, 建议采用专用的 U 盘, 保存在其他地方可能因为密钥丢失造成损失.
为了顺利复制, 需要注意公钥文件权限应为 400, 可以通过 chmod 400 id_rsa.pub 来改变.
2. 复制公钥到服务器
在密钥对生成之后, 需要将公钥添加到服务器中, 相当与把锁挂在门上. 但和物理的锁不同, 一个服务器可以不仅仅只有一个公钥. 如果几个不同的用户登录, 可以每个人将自己的公钥添加到服务器上, 然后各自凭各自的私钥就可以登录服务器. 将公钥复制到服务器也有几种办法, 但前提是公钥服务器对应位置的文件夹和文件权限允许.
先用普通密码方式登录远程服务器, 在要登录用户的主目录下建立隐藏目录. SSH, 并在目录下建立 authorized_keys 文件(如果已有就不用建立了), 并且改变目录和文件权限分别为 600 和 700. 命令分别为 chmod 600 authorized_keys 和 chmod 700 ~/.SSH.
复制公钥可以用以下几种命令, 其中最便捷的 SSH-copy-id 命令, 只要输入 SSH-copy-id username@remote-server -p +++, 其中 username 和 remote-server-ip 换成服务器用户名和地址(ip 地址或域名), 默认端口 22 则不需要后面参数, 否则需要加上 -p 和 SSH 端口号. 输入远程用户的密码后, SSH 公钥就会自动上传了.SSH 公钥保存在远程 Linux 服务器的 .SSH/authorized_keys 文件中.
也可以用命令组合直接将公钥命令追加到远程服务器文件中, 这需要对 shell 操作有一定了解. 参考命令如下: 这一命令组合了 cat 和 SSH, 如果需要改变端口同样在 host 后面加 - p 和端口号.
cat ~/.SSH/id_rsa.pub | SSH user@host "cat ->> ~/.ssh/authorized_keys"
除此之外, 也可以通过 scp 命令将公钥拷贝到服务器上, 再通过 cat 命令进行添加. 这一命令可以理解为前一个命令的分解动作, 实际使用中, scp 也是在两个电脑之间复制文件的最常用的命令之一.
scp /home/.SSH/id_rsa.pub root@192.168.1.65:/home/.SSH/id_rsa.pub (也可以修改文件名)然后登录到服务器上用 cat 命令追加文件内容:
cat id_rsa.pub>> authorized_keys
3. 设置服务器配置文件, 允许密钥登录
打开并编辑 /etc/SSH/sshd_config 文件, 进行如下设置:
- RSAAuthentication yes
- PubkeyAuthentication yes
另外, 请留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
当你完成全部设置, 并以密钥方式登录成功后, 如果要提高系统安全性, 避免无聊或者有特殊目的的黑客骚扰, 可以禁用密码登录:
PasswordAuthentication no
最后, 重启 SSH 服务:
[root@host .SSH]$ service sshd restart
4. 设置别名, 快速访问服务器
如果管理的服务器不止一个(或者即使只有一个). 即使少去输密码的过程, 每次登录时都要记住 ip 地址或者域名, 端口也实在是件头疼的事. 这样设置别名就非常重要了. 在 Windows 下, 由于登录 SSH 一般需要第三方软件, 在录入服务器时其实已经完成了设置别名的过程. 而在 Linux 下, 则需要修改(或新建)config 文件来实现别名.
在客户机主目录的. SSH 目录下新建或修改 config 文件(~/.SSH/config), 按照如下方式输入服务器信息:
- Host ecs // 输入远程服务器的别名, 也就是后续要使用的简单名称, 如果对同一个服务器要设置不同别名, 只要名称之间用空格隔开即可.
- HostName 192.*.*.*// 输入服务器的 IP 地址, 或者域名
- Port 22 // 输入端口号, 默认为 22
- User root // 输入登录账号
- IdentityFile ~/.SSH/id_rsa // 输入私钥文件在本机的地址
如果有多个服务器, 则按照上述格式依次添加, 添加完成并保存之后, 输入 SSH ecs(别名)就可以直接访问对应服务器了. 当然, 如果你的密钥有加密保护 (建议要有) 的话, 仍然需要输入一次密码.
此外, 上传密钥并不一定要完全禁用密码等等, 实际使用也可以用 - i 参数直接用密钥登录, 用法比如: SSH -i /root/mysshkey.pem root@10.10.10.100.
来源: http://www.jianshu.com/p/69d84a1eb439