不用密码直接用 ssh 登入到远端电脑

参考文件

  • pinfo ssh-keygen
  • Linux 伺服器安全防护 (O'REILLY, ISBN: 986-7794-18-4)

多年前 telnet 当道,但在安全意识渐渐浮上台面之后,telnet 在登入时的安全就被大家质疑,后来 ssh (Secure Shell) 出现时,改变了当初的习惯,大家在管理 Linux 时,现在都使用 ssh 来登入,而 ssh 好处我在这也不再多做说明,因为他还可以配合 rsync 做出远端备份,一旦设定好 ssh 之后,还会有 scp 可以使用!这样就可以在不同电脑间 copy 档案,并且为传输的资料加密了!

Shell Script & ssh
自动化的工作可以让管理员有效率的完成目标,也不用浪费人力和时间做同样的事情,在无人职守的情况下,要让 script 自动连入远端系统做事是件有些麻烦的事,因为您必需登入系统才可以继续工作,为了不略过登入系统这个步骤,我们可以制做一个 public key 让远端的机器信任我们,如此就只要直接连入就可以,而不用再输入帐号和密码。

制作 public keys & private keys
利用 ssh-keygen 来做出公用和私有钥匙,并传送 public key 到远端机器使其信任本机登入。

[steven@cute steven]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/steven/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): <- 不用输入
Enter same passphrase again: <- 不用输入
Your identification has been saved in /home/steven/.ssh/id_dsa.
Your public key has been saved in /home/steven/.ssh/id_dsa.pub.
The key fingerprint is:
fa:c9:a9:e4:d5:70:52:88:cc:f3:25:fd:68:ae:c4:4b steven@cute.com.tw
[steven@cute steven]$

接著,再到 /home/steven/.ssh 里看看,会多出 id_dsa 和 id_dsa.pub 这两个档案。

[steven@cute steven]$ cd .ssh
[steven@cute .ssh]$ ls
id_dsa id_dsa.pub known_hosts
[steven@cute .ssh]$

现在我们要使远端机器 mirror.abc.com,使用 sandy 登入时不用输入密码,因为,我们应该复制一份 id_dsa.pub 到 sandy@mirror.abc.com 去,并加入到 authorized_keys。

[steven@cute .ssh]$ scp id_dsa.pub sandy@mirror.abc.com:~/id_dsa_steven.pub
sandy@mirror.abc.com's password:
id_dsa.pub 100% |*****************************| 607 00:00
[steven@cute .ssh]$

登入 sandy@mirror.abc.com

[steven@cute .ssh]$ ssh sandy@mirror.abc.com
sandy@mirror.abc.com's password:
-bash-2.05b$ ls id_dsa_steven.pub
id_dsa_steven.pub
-bash-2.05b$ cat id_dsa_steven.pub >> .ssh/authorized_keys
-bash-2.05b$ exit

完成后离开,回到本机,再做一次 ssh 到 mirror.abc.com

[steven@cute .ssh]$ ssh sandy@mirror.abc.com
-bash-2.05b$


如此就不用输入密码就直接登入了!

保护你的私有金匙
在制做 dsa key 时,会有一份私有和一份公有金匙,实务上会保留起来,并做备份,因为当 ssh 在登入时,会使用 id_dsa.pub 和本机的 id_dsa 做确认,因此如果这两者比对不成功时就会再次要求输入密码。

 

Index