通常来说,我们使用 ssh user@host -p port,再输入密码,才能 ssh 到服务器进行管理。人类与动物的区别在于人会使用工具。所以我们要利用一些工具来简化我们的操作。

好在 Unix 系的操作系统提供了各种 ssh 支持。我们得以实现偷懒的目的。

先假设我们有一台服务器,主机名 testhost,ip 为 8.8.8.8,账号为 foo,密码为 bar,ssh 端口为 2222。一般的连接方式是:

1
2
$ ssh foo@8.8.8.8 -p 2222
password: bar

不仅很麻烦,还要记忆 IP 和端口,当我们有很多台服务器的时候,一定会疯掉!现在,我们来简化操作。

一、普通方式:~/.bash_profile

Alias 相当于一种快捷方式或别名,让我们能把一长串命令简化成一个简短的命令。比如 Mac OSX 下没有直接的 ‘ll’ 命令,可以用 ‘ls -alF’ 实现 ‘ll’ 命令的效果。Alias 可以在主目录的 .bash_profile 文件中配置,此文件为隐藏文件,需要 ‘ls -alF’ 才能看到,如果 ‘ls -alF’ 还是看不到,可以自行创建此文件。在这个文件中,我们添加以下内容:

1
alias testhost='ssh foo@8.8.8.8 -p 2222'

保存后,就可以像这样登录服务器了:

1
2
$ testhost
password: bar

二、初级偷懒方式:~/.ssh/config

在第一种方式中,实际我们没有利用到 ssh 的功能,只是利用了 bash 来简化,不太优雅。ssh 的问题应该由 ssh 来解决。所以,我们有了第二种方式。

ssh 有自己的配置文件,位置在 ~/.ssh/config 中,可以使用以下命令来编辑:

1
$ vi ~/.ssh/config

ssh 配置文件可以将服务器地址,端口,用户配置成一个别名。我们的范例服务器可配置为为:

1
2
3
4
Host testhost
HostName 8.8.8.8
Port 2222
User foo

保存后,可以使用以下方式登录服务器:

1
2
$ ssh testhost
password: bar

三、高级偷懒方式:SSH Key

在上面的两种方式中,我们都需要手工输入密码。能减掉这个步骤吗?当然可以!ssh 除了密码登录,还有更简单且更安全的登录方式,那就是 ssh key 登录。

先生成公钥和私钥,在 Mac OSX 终端(或 iTerm 2 等)中进入 ~/.ssh 目录,输入:

1
$ ssh-keygen -t rsa

会询问一些问题,直接全部回车,即可在 ~/.ssh 目录中生成 id_rsa(私钥) 和 id_rsa.pub(公钥)文件。我们需要将公钥上传到 testhost 服务器的 ~/.ssh 目录下面,因为第二种方式中我们已经配置了 testhost 服务器,scp 也能识别这个服务器,所以,可以使用如下命令将文件传输到 testhost 服务器中:

1
$ scp ~/.ssh/id_rsa.pub testhost:~/.ssh/

接下来,用第二种方式登录到 testhost 服务器中,在 ~/.ssh 目录中使用以下命令将 id_rsa.pub 更名为 authorized_keys:

1
foo@testhost: $ mv id_rsa.pub authorized_keys

最后确保下文件权限正常:

1
2
foo@testhost: $ chmod 700 ~/.ssh/
foo@testhost: $ chmod 600 ~/.ssh/authorized_keys

现在,我们可以在 Mac OSX 的终端中使用 ssh testhost 登录到 testhost 服务器了,无需输入密码,更无需记忆服务器参数。

如果无法连接,请在服务器的 /etc/ssh/sshd_config 文件中查看 PubkeyAuthentication 的值是否为 yes,如果不是,请修改为 yes ,并使用以下命令重启 ssh 服务:

1
2
3
4
5
foo@testhost: $ /etc/init.d/ssh restart

//or

sudo service sshd restart 可以用这个 ssh服务是用yum来安装的 都可以统一用service命令来控制

如果需要禁止密码登录,同样可以编辑 /etc/ssh/sshd_config 文件中 PasswordAuthentication 的值为 no 并重启 ssh 服务。

当有多Mac(设备)要登录同一台服务器时的解决方案:

  1. 先把新mac(设备)的id__rsa.pub都scp到目标服务器上,文件名后面统一加一个后缀, 如:id_rsa.pub.host1
  2. 再执行
    1
    cat id_rsa.pub.hostX >> .ssh/authorized_keys

每个文件执行一回,hostX要改成相应的文件名后缀。 将新的key 追加到authorized_keys当中。
再把生成的authorized_keys给各主机SCP过去,就完事了。