whyisyoung's Blog

If you can not persist, you will never succeed :)

SSH Login Without Password

| Comments

Test environment: Ubuntu 12.04 LTS

使用 SSH 时绝大多数的登录场景如下:

1
2
ssh -p 5555  user@199.45.00.75
此处输入密码

然后顺利登陆到主机 199.45.00.75

每次输入密码是一件非常繁琐的事情,那么能不能省去这一步呢?答案是肯定的。

Step 1. 远端主机设置

登入远程主机后,检查以下文件:

sudo vim /etc/ssh/ssh_config

检查是否存在以下两行(可用 / 命令搜索) 并编辑这两行不要被 # 注释掉:

1
2
RSAAuthentication yes
PubkeyAuthentication yes

字如其意,允许远端主机同意使用 RSA 和公钥密码认证的方式登陆。

Step 2. 本地机器生成 RSA 公私钥

可使用如下命令生成:

ssh-keygen -t rsa -C "whyisyoung@test.com"

Note:

  • -C: provides a new comment,可省略,
  • -t 指明要生成的密钥类型,也可以用 dsa

随后按照提示,基本可以一路敲回车,默认文件名是 id_rsa.pub(公钥) 和 id_rsa(私钥), 如果提示是否要密码(为了打开私钥文件),可以直接回车不要密码,也可以再输入一个密码(会在第一次登录时要求输入此密码,后续不用,但是关机后下次再登录需要再次输入密码,因此最懒的方式是不要密码)。

Step 3. 与远程主机建立信赖机制

将公钥拷贝到远程主机:

ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 5555 user@199.45.00.75'

Note:

  • -i 后面是 identity file, 也就是你的公钥文件
  • 注意若登陆远端主机要指定端口时,端口要用引号引起来

输入远程主机密码

这一步会将你的公钥文件内容拷贝到远程主机的 ~/.ssh/authorized_keys 文件中。

至此,可直接用 ssh -p 5555 user@199.45.00.75 登录,不用再键入密码

Take-away

更进一步,可以在本地机器的 ~/.zshrc 里面加入 alias,进一步简化登陆。

alias dev="ssh -p 5555 user@199.45.00.75"

在终端键入 dev, 就可以直接登录了 hhh

也许你有不止一台远程主机, 那么可以按照如下配置给每台 server 起个名字:

1
2
3
4
5
6
7
8
vim ~/.ssh/config

编辑该文件

Host servername
    HostName user@199.45.00.75
    Port 5555
    User username

然后登入这台机器只要 ssh servername 即可, 但感觉比上面的 dev 命令慢。

Comments