跳到主要内容
  1. Skills/
  2. 系统运维、优化/

如何实现ssh免密码登录linux服务器

··字数 1491·3 分钟
ssh howto

站长购买了云服务器,或者vps,都需要通过远程登录的方式来管理。 设想一下,如果你买了10台云服务器,分别设置了不同的密码,为了安全,这些密码都非常难记。这时若需要往这十台服务上传文件,你每次登录都需要输入这些密码,是不是很麻烦。

ssh免密码登录方式就是来解决这个问题的。配置好之后,就不用改,这是一劳永迭的方法。简单到你以后绝对会忘记 ssh 登录命令的一般格式。

要实现ssh免输入密码登录,需要生成密钥对,并将公钥上传到远程服务器。

ssh 的默认配置文件目录为 ~/.ssh

生成密钥对 #

  • 使用 ssh-keygen 创建keyfile

ssh-keygenssh 工具链中的一员,安装好 ssh 环境之后就有。

# 为操作方便,进入 ssh 配置目录
cd
➜ mkdir .ssh
# 使用最简的命令,rsa 加密算法生成密钥对。需要高安全性的,参考 ssh-keygen 文档
➜ ssh-keygen -t rsa 

上面的 ssh-keygen -t rsa,会在 ~/.ssh/生成密钥对文件,公钥 id_rsa.pub 和私钥 id_rsa 文件。

注意:以上的 ssh-keygen 命令生成的密钥文件会覆盖 ~/.ssh 下的同名文件,虽然有提示,但还是要滤。

密钥对生成后,将公钥文件上传到准备要实现免密登录的服务器上。

关于 ssh-keygen -t XXX,支持 “dsa,ecdsa,ed25519,rsa” 等四种加密算法。咱们不是研究密码学的,专家说哪个安全咱们就用哪个。一般使用 rsa, 安全性更好的用 ed25519.

上传公钥/copy-id #

将公钥文件上传到远程服务器。

cd ~/.ssh
➜ ssh-copy-id -i ./公钥文件 用户@远程服务器IP -p ssh端口
# 根据提示输入密码

ssh-copy-id -i id_rsa root@youwutodayIP

ssh 默认的端口22。安全起见,不少服务器都修改为其它端口号,避免被扫描。 若你知道如何配置 ~/.ssh/config,使用 config 中的名称来表示登录信息的,可以使用这种方式上传公钥文件。如何配置登录项,参见本文最后一节 [ssh 登录名的配置](#ssh 登录名的配置)

cd ~/.ssh
➜ ssh-copy-id -i ./公钥文件 在config中远程服务程对应的名称
# 根据提示输入密码

知识点: 当上传成功后,这个公钥被写到远程服务器用户下的ssh配置目录中,默认路径为 ~/.ssh/authorized_keys

登录验证 #

若以上操作过程均正确,通过下面命令即可通过 ssh 登录远程服务器。

➜ ssh 用户@远程服务器IP -p ssh端口
# 若已配置.ssh/config,使用ssh配置名指定登录的服务器
➜ ssh config中使用的名称

是不是很方便呢!!!

ssh 登录名的配置 #

ssh 工具提示了大量的选项用于命令执行,也被称为参数魔法。通过config来配置常用参数项,可以使得 ssh 命令变得非常简短。 为了减少输入那些讨厌的ip地址、用户名、端口等,通过将这些登录时的必填要素记录在 config 文件中,在登录时 ssh 会自动读取,这样就可达到上面所演示的 使用名称来指定服务器。

配置文件位于 ~/.ssh/config,内容如下:

Host 一个别名
    User root # 登录的用户名,也是上传公钥文件的用户
    HostName 远程服务器IP
    Port 服务器的ssh端口
    IdentityFile ~/.ssh/id_rsa # 私钥文件

保存后,试一下,是不是通过 ssh 一个别名 的方式登录。

更多常用的 ssh 配置,可以看本站文章。

注意事项 #

ssh客户端会判断 ~/.ssh/ 目录下的文件权限,比如目录下的文件若读写权限太高,本地ssh 客户端会停止连续远程服务器。

如大概会出现以下这些提示

➜ ssh youwu
Bad owner or permissions on /Users/youwu.today/.ssh/config

# 或者

➜ ssh youwu
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0666 for '/Users/youwu.today/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/youwu.today/.ssh/id_ed25519": bad permissions
youwu.today@xxx.xxx.xxx.xxx: Permission denied (publickey).

# 其中 id_ed25519 是有悟的私匙文件,你的可能是 id_rsa。

意思就是 ~/.ssh 下的配置文件权限太宽,需要禁止掉“组、其他用户”的读写权限,也就是配置信息仅属于当前用户,不与其他用户共享。

可通过下面命令解决:

➜  chmod 666 ~/.ssh/config
➜  chmod 666 ~/.ssh/id_ed25519