连接中转
有时候你可能需要从一个服务器连接另外一个服务器,比如在两个服务器之间直接传输数据,而不用通过本地电脑中转:
www1 $ scp -pr templates www2:$PWD
(顺便说一下,当你需要在两台服务器间拷贝文件时,$PWD变量是非常有用的),因为即使你已经在两台服务器上添加了你本地电脑的公钥,scp默认仍然会提示你输入密码:这是因为你用来作为跳板的那台服务器上并没有你的私钥,所以,第二台服务器会拒绝你的公钥,但是一定不要通过将你的私钥拷贝到中转服务器上来解决这个问题,你可以使用agent forwarding来解决这个问题,只要在你的.ssh/config文件中加入下面这行代码就可以了:ForwardAgent yes或者是在Putty中勾上“Allow agent forwarding”选项,本地SSH就变成了第一台服务器的SSH代理,从第一台服务器在连接其它服务器就变和和在你本地一样简单,注意,如果要开启这个选项,前提是这个中间服务器值得你信任。
免密登录
如果觉得每次登录都需要填写密码,那么可以试试SSH Keys,首先使用OpenSSH为自己生成一对密钥:
$ ssh-keygen
跟随指示,完成之后,你应该可以在你的.ssh目录下看到两个文件,id_rsa就是你的私钥,而id_ras.pub则是你的公钥,现 在你需要将你的公钥拷贝到服务器上,如果你的系统有ssh-copy-id命令,拷贝会很简单:
$ ssh-copy-id
否则,你需要手动将你的公钥拷贝到服务器上的~/.ssh/authorized_keys文件中:
$ < ~/.ssh/id_rsa.pub ssh ‘mkdir -p .ssh; cat >> .ssh/authorized_keys; chmod go-w .ssh .ssh/authorized_keys’
别名
使用ssh 登录远程主机需要使用 $ ssh username@ip 的格式。每次登录都要输入这些东西很麻烦,所以我们可以给固定的 username@ip 取个别名在~/.ssh/config 文件中添加如下内容:
Host centos #别名
HostName 192.168.1.100 #远程主机ip
User root #欲登录的账户名
Port 22 #端口号,这个也可以不设置,默认22端口
这样的设置后 使用 $ ssh cnetos 等同于$ ssh -p 22 root@192.168.1.100
多条连接共享
如果你需要在多个窗口中打开到同一个服务器的连接(有的服务器自身最小化,不支持分屏显示),而不想每次都输入用户名,密码,或是等待连接建立,那么你可以配置SSH的连接共享选项,在本地打开你的SSH配置文件,通常它们位于~/.ssh/config,然后添加下面2行:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
试试断开你与服务器的连接,并建立一条新连接,然后打开一个新窗口,再创建一条连接,你会发现,第二条连接几乎是在瞬间就建立好了。
如果本身就做了做了免密,这个东西也就没用了。