ssh相关

来源:互联网 发布:电脑网络参数怎么设置 编辑:程序博客网 时间:2024/05/19 04:56

ssh登陆分两种,一种是密码登陆,一种是公钥登陆。


密码登陆:

当本地发送 ssh someuser@someip命令后,远端机器将把尝试把自己的私钥的指纹发回,用户确认该指纹和远端机官网贴出的内容一致之后,选择同意,远端机器则将自己的公钥发送给本地。此时,该公钥将被保存在本地的.ssh/known_hosts文件中。

有了该公钥之后,用户输入自己的登陆密码,ssh会用远端机器的公钥加密密码,远端机器用自己的私钥解密发现密码正确,允许登陆。


公钥登陆:

每一次输入密码都很麻烦,所以可以采用这种登录方式。

本地用户通过ssh-copy-id命令将自己的公钥发送给远端机器,其实现机制实际上就是先从本地ssh到远端机器,然后把本地的id_rsa.pub(公钥)文件追加在在远端机器的.ssh/authorized_keys文件中。

登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。


例子:github

github中,如果将机器A的公钥拷贝到某个人的github账户的ssh配置中,那么这台机器相当于就能够访问该用户能够访问的所有github repo,并且权限和该用户一致。


验证公钥指纹

github中设置了一个公钥后,再次浏览时公钥只会以指纹的方式展示,所以要检查自己机器上的公钥是否在github上存在的话需要执行这个命令

ssh-keygen -lf ~/.ssh/id_rsa.pub


ssh-agent:

1.不用重复输入密码,私钥存放内存,更加安全

如果你对你的私钥不放心,生怕别人登陆了你的机器后把你的公秘钥全部拷贝走了,也没关系,你可以在ssh-kengen的时候设置一下私钥的passphrase。

但是这样的话,即使把自己的公钥放到远端机器了,ssh时也要提醒你输入passphrase的密码,很麻烦。

所以需要使用ssh-agent命令,该命令和ssh-add配合使用。首先先要执行ssh-agent命令,然后执行ssh-add,会提示输入passphrase,该命令会用passphrase对 ~/.ssh/id_rsa(本地私钥)解密,然后加载到ssh-agent进程的内存中。

这样以后执行ssh登陆远端机器就可以不输入密码了。


2. forward私钥(猜想,有待考证)

如果有b,c,d三台机器,

b是外网的机器,比如一台跑着app的ruby或者node代码的服务器,c是跳板机,d是能访问数据库和内部API的内网机器或者类似github这样的机器。

通常的场景是d上放置b的公钥。然后通过c把b和d连接起来。这是怎么做到的呢?

首先在b上运行ssh-agent,然后从b机器ssh连接到c机器时,b内存中的私钥也会被forward到c机器上。这样在c机器访问d机器时,会使用b机器的私钥进行加密,然后d也用b机器的公钥进行解密。


原创粉丝点击