自动ssh登录的几种方法

作者: lesca 分类: Tutorials,Ubuntu,Web 发布时间: 2011-06-06 19:18

1. 自动认证ssh/scp登录

本文使用ssh-keygen命令来生成rsa类型的ssh密钥(private key)和公钥(public key),其中密钥留在本地计算机,公钥追加到服务器端的authorized_keys文件中。

在A上运行命令:

# 1.在本地生成公钥和私钥(直接敲击三次回车)
ssh-keygen -t rsa

# 2.在服务器端新建.ssh目录
ssh root@host1 "mkdir .ssh" 

# 3.将本机.ssh目录下的公钥复制到服务器端.ssh目录下
scp ~/.ssh/id_rsa.pub root@host1:.ssh/ 

# 4.将公钥信息追加authorized_keys文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 

测试:本地主机运行

# 不需要密码, 登录成功
ssh root@host1 

这样一来,scp也能够无障碍传输文件了。

2. ssh-copy-id

感谢lyxint评论,本节已经更新!
ssh-copy-id是一款现成的脚本,可以将本地生成的公钥自动追加到服务器端的.ssh/authorized_keys文件中。
用法:

ssh-copy-id [-i [identity_file]] [user@]machine

/!\注意:-i参数需要指定公钥文件(如,id_rsa.pub)

3. 多个服务器的自动登录

上一节中,生成公钥和密钥的时候使用了默认的名称:id_rsa(密钥)、id_rsa.pub(公钥)。SSH客户端在连接服务器端的时候使用的是密钥(id_rsa),服务器端验证时使用的是保存在authorized_keys文件中的公钥。
虽然私钥和密钥是成对存在的,但是私钥中不保存和服务器有关的信息,也就是一份私钥可以和多个服务器进行配对,只要把公钥追加到对应服务器上的authorized_keys文件中即可。但是这样不安全,由于只有一份私钥,一旦被非法使用将会连累所有服务器。特别是连你都忘记到底和多少服务器配对过的情况下。因此,我们有必要使用多份“私钥-公钥”对于进行验证。
由于SSH客户端默认读取id_rsa密钥,因此我们需要通过-i参数告诉SSH客户端使用哪个密钥。假如我们又生成了id_rsa_host2“私钥-公钥”对,并已将公钥追加到sever的authorized_keys文件中,此时只要使用ssh命令的-i参数指定本地密钥

# ssh -i /root/.ssh/id_rsa_host2 someone@host2

scp也是一样的

# scp -i /root/.ssh/id_rsa_host2 filename someone@host2:/home/someone

4. 建立ssh/scp通道

比如说我的机器是A,中间服务器为B,目标服务器是C
从A可以ssh到B,从B可以ssh到C,但是A不能直接ssh到C
现在展示利用ssh通道技术(本地端口转发)从A直接传输文件到C

ssh -L1234:C:22 userid@B
input B's password
(1234是本机A的空闲端口,该指令需要A机器上的root用户权限,实际上是在本机1234端口建立了一个通道)

打开一个新的console,键入:

scp -P1234 filename userid@localhost:
input C's password
(其中-P制定远程主机A的端口)

References

[1] 自动ssh登录的几种方法

版权声明

本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

本文永久链接: https://www.lesca.cn/archives/auto-ssh-login.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

3 Comments
  • lyxint

    2011-07-24 at 15:12

    man ssh-copy-id

  • 柳城

    2011-12-21 at 15:28

    学习了第一种方法。非常好用。

  • name

    2013-05-19 at 18:49

    其实关键就是修改远程机器配置文件,http://blog.pickbox.me/archives/177,注意参数PubkeyAuthentication、AuthorizedKeysFile、PasswordAuthentication的配置