所有文章

不用密码ssh登陆服务器

今天又拿到了一台服务器的权限,才来到这个公司没多久现在算一下已经拿到很多机器的权限了,本地测试机有3台,都拥有root权限, 线上服务器有5台,有部分root权限。刚开始用xshell登陆服务器还没什么觉得不方便的,但是现在我已经完全使用linux办公了,所以 只能用terminal来ssh连接服务器。手动输入密码太麻烦了,而且还是经常性的输密码。

今天又花了点时间看了一下公钥加密的过程这块,了解了一个ssh连接的基本流程。ssh登陆有2种方法:

  1. 基于密码的验证。
  2. 基于公钥私钥的验证。

基于密码的验证很好理解,当连接服务器的时候会提示你输入密码,等验证通过之后就能连接远程服务器了。这种方法很好理解,但是其实 局限性是很大的,首先麻烦,每次登陆都得输密码,而一个安全的密码又不是那么好记。其次密码被暴露的次数越多就越不安全,万一哪一次 在输入密码的时候被中间人给截获了这个密码,那么就没有丝毫秘密可言了。

而基于公钥私钥的验证相比起来就安全多了,在服务器中保存一份你自己的公钥,服务器就会知道你是授权了的用户,客户端连接服务器的时候 会检查这个用户的公钥是否在授权了的公钥列表中,如果在的话就放行,允许登陆。登陆之后加密的方法就很简单了,服务器用客户端的公钥加密信息 后传给客户端,客户端收到这个加密的信息之后用自己的私钥解密。然后客户端给服务器发送信息,用服务器的公钥加密,服务器收到之后拿自己的 私钥解密。

所以总的来说ssh连接就是2步,一步是验证身份,剩下的就是交换公钥的加密数据传输。

因为我现在都是使用运维给我分配的帐号密码来登陆服务器,每次连接都得输入密码很不方便,所以我还是改为通过公钥来验证身份好了。

首先给自己生成一个公钥私钥对,使用ssh-keygen生成公钥和私钥对,一般的命名规则是idrsa和idrsa.pub, 默认使用的加密方法是rsa, 默认使用2048字节的私钥。然后就是把自己的公钥添加到服务器上,保存在~/.ssh/authorized_keys里面。具体实现方法有很多,可以直接复制粘贴进去, 可以把公钥文件传到服务器上,也可以用一个简单的命令ssh-copy-id,这样就可以绕过手动输入密码了。

真是搞不懂,运维们有这么好的方法不用为什么要给一个账户创建密码呢,直接向我要一个公钥,然后加到服务器就行了嘛。

今天发现一个很好用的手机ssh客户端叫作juice ssh,拿它可以用手机来连接ssh服务器。不过这个app应该是记住密码的形式来完成连接的,因为没有在服务器上的.ssh/authorized_keys里面找到我的手机的公钥。而且连接公司服务器需要vpn,还得在手机上设置vpn连接,只能在wifi环境下才能连接vpn,如果开数据连接的话就连不上了。