ssh免密登陆

阅读: 1592 | 文章分类: Linux | Tag: SSH  

运维的职业往往会一个人管理几百台服务器,服务器多了,就难管理,如果一个服务器出现故障我们就得ssh连接过去维护,但如果是多台服务器故障呢?或者说要把一个应用部署到n多台服务器上呢?难道一台一台ssh连接上去? ssh免密登陆就能让我们更方便地管理服务器,省去一台一台输入密码地过程。 # linux免密登录 #### 生成私钥和公钥 ``` [root@localhost ~]# ssh-keygen -t rsa # 生成私钥和公钥 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): # 指定保存私钥文件路径(一般使用默认所以直接回车) Enter passphrase (empty for no passphrase): # 设置密码(我们就是要做免密,所以不要设置密码,直接回车) Enter same passphrase again: # 确认密码(同上,直接回车) Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: ab:0d:84:18:73:9d:e5:35:3b:b5:78:19:91:96:6a:ee root@localhost.localdomain The key's randomart image is: +--[ RSA 2048]----+ | . o ++ | | . + . =++ | | o . o . +o+ | | = . oo | | . . . So | | . .. | | . .. | | + E | | . . | +-----------------+ [root@localhost ~]# ls .ssh/ id_rsa id_rsa.pub known_hosts ``` 这里已经生成了公钥和私钥了,可以ls查看下~/.ssh/目录下的文件 ssh-keygen命令可以不加后面地参数,直接使用ssh-keygen进行生成,可选[RSA](https://baike.baidu.com/item/RSA%E7%AE%97%E6%B3%95/263310?fr=aladdin&fromid=210678&fromtitle=RSA "RSA - 百度百科")和[DSA](https://baike.baidu.com/item/DSA%E7%AE%97%E6%B3%95/10856660?fr=aladdin "DSA - 百度百科")两种加密方式,使用-t指定 ``` ssh-keygen -t rsa ssh-keygen -t dsa ``` 生成地文件会放在用户地home目录下.ssh/地目录下目录下地所有文件 ↓↓↓↓ ``` id_rsa :这个文件是系统生成地私钥文件(必须用户手动生成) id_rsa.pub :公钥文件(同上,必须用户手动生成) know_hosts :已知主机公钥清单(连接过其他服务器都会生成) authorized_keys :保存客户机公钥文件 ``` > 在~/.ssh这个目录的权限必须是700,而~/.ssh/authorized_keys文件必须为600权限 ## 发送公钥到服务器上(2种方式) #### 使用ssh服务自带的ssh-copy-id命令 ``` [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.12 # 发送公钥到其他要做免密的服务器上 The authenticity of host '192.168.10.12 (192.168.10.12)' can't be established. ECDSA key fingerprint is 28:87:e2:75:31:80:b2:26:b6:47:13:c8:cb:b3:7b:83. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.10.12's password: # 输入192.168.10.12服务器root密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.10.12'" and check to make sure that only the key(s) you wanted were added. ``` 如果是非默认22端口,则使用以下命令 ``` [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub '-p 6666 youboy@192.168.10.12' ``` ssh-copy-id方式完成 #### 使用scp方式 使用scp方式将id_rsa.pub文件发送到对方服务器上 ``` [root@localhost ~]# scp .ssh/id_rsa.pud root@192.168.10.12:~/ ``` 然后到对方服务器通过cat方式追加到~/.ssh/authorized_keys文件里 ``` [root@localhost ~]# cat id_rsa.pud >>.ssh/authorized_keys ``` > 注意:如果没有authorized_keys这个文件,可以手动创建,但要修改权限为600,创建文件可使用touch命令,修改权限使用chmod命令 scp方式完成 ### ssh-copy-id与scp优缺点 > ssh-copy-id 在企业中更偏向于使用ssh-copy-id去发送公钥,因为可以减少连接过去另外一台服务器然后再cat追加进去的步骤,如果少量服务器还好,大批量的话可以使用脚本进行发送,但如果是scp则无法使用脚本分发 >scp 使用scp能更深层次地了解做免密地原理,比ssh-copy-id更加深刻,但不便于大批量操作 #### 注意问题 如果出现下面的提示,证明你要连接的服务器有做变更,需删掉本机~/.ssh/know_hosts文件中对方服务器保存的信息那行(只删除你要连接的服务器那行就好,如果没有特殊要求,不要清空整个文件) ``` [root@localhost ~]# ssh root@192.168.10.12 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 11:d8:2b:5c:f7:aa:57:6a:8a:f8:80:4f:17:c8:e2:71. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:20 RSA host key for 192.168.10.12 has changed and you have requested strict checking. Host key verification failed. ``` # 补充知识点 每次链接新的服务器时候都要确定是否链接,然后输入yes后才可以继续,这一步可以在ssh的配置文件里面去除 vim编辑/etc/ssh/ssh_config文件 将 ``` # StrictHostKeyChecking ask ``` 改为 ``` StrictHostKeyChecking no ``` # 常见问题 在做免密认证时候如果遇到ssh-copy-id找不到这个命令时候,就是缺少包(在CentOS6版本最小化安装就会出现这个问题),按照下面的方式安装openssh的包即可 ``` yum -y install openssh-clients ```