ssh免密码登陆

1.ssh的登陆方式

1.1 密码口令

  • 客户端链接上服务器以后,服务器把本身的公钥传给客户端
  • 客户端输入服务器密码经过公钥加密以后传给服务器
  • 服务器根据本身的私钥解密登陆密码,若是正确那么就让客户端登陆

1.2 公钥认证

这个其实比上面的要简单,以前上大学时老师也讲过。必定要明白客户端和服务端时经过公钥和私钥实现认证登陆的。必定要紧紧记住就是只靠这两个东西,没有其余的了。服务器

拿自动化部署举例,Rundeck部署在一台服务器上如今要对其余的一台或者多台部署服务器进行项目部署,在这个场景下Rundeck对应的服务器要想去访问其余的部署服务器就要经过公私钥的这种方式。ssh

Rundeck服务器至关于A端,而部署服务器至关于B端。A、B两端要实现交互认证就要经过一组公私钥。加密

一、客户端即A端生成RSA公钥和私钥:spa

通常在用户的根目录新建一个.ssh/.文件夹,在文件夹中经过ssh-keygen -t rsa命令来产生一组公私钥。3d

以下图所示id_rsa为私钥,id_rsa.pub为公钥。code

二、客户端将本身的公钥存放到服务器:在生成了公私钥以后要实现AB两端的交互认证,这两个文件确定不能只放到A端,固然也须要在B端(服务器端)作一下登记,咱们本身(A端)保留本身的私钥,而后把公钥id_rsa.pub存放到B端(通常是在用户根目录下的.ssh/目录下)blog

在服务器端(B端)的.ssh/目录下还会有authorized_keys+know_hosts,这两个文件。进程

authorized_keys:存放远程免密登陆的公钥,主要经过这个文件记录多台机器的公钥,上面提到的A端在生成本身的公私钥以后,将公钥追加到authorized_keys文件后面。ip

红色框起来的为新追加的A端的公钥。rem

know_hosts : 已知的主机公钥清单,这个做为A端和B端都会自动生成这个文件,每次和远端的服务器进行一次免密码ssh链接以后就会在这个文件的最后追加对方主机的信息(不重复)

每进行一次就会在这个文件中自动的追加新的主机信息

经过scp将内容写到对方的文件中

命令:scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys

也能够分解为一下两步来进行:

$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //将文件拷贝至远程服务器
$ cat ~/pub_key >>~/.ssh/authorized_keys //将内容追加到authorized_keys文件中, 不过要登陆远程服务器来执行这条命令

网上不少都是用scp >>去追加,若是你能够登陆到B端的话其实直接复制过去就能够了。

 须要注意的几点:

设置文件和目录权限(服务器端即B端的权限):

设置authorized_keys权限
$ chmod 600 authorized_keys 

设置.ssh目录权限
$ chmod 700 -R .ssh

到这里咱们的配置工做就结束了!!!

进行链接认证:

ssh root@222.73.156.133 -p1019

 

若是嫌每次链接的时候很麻烦

咱们能够利用 ssh 的用户配置文件 config 管理 多个免密码ssh 会话。ssh 的用户配置文件是放在当前用户根目录下的 .ssh 文件夹里(~/.ssh/config,不存在则新建立一个),其配置写法以下:

Host    别名

    HostName        主机名

    Port            端口

    User            用户名

    IdentityFile    密钥文件的路径

以下图实例:

 

配置完后咱们就能够经过这种方式登陆了:

 

---------------------------------------------------------

两台服务器交互验证的细节以下:

三、客户端请求链接服务器,服务器将一个随机字符串发送给客户端

四、客户端根据本身的私钥加密这个随机字符串以后再发送给服务器

五、服务器接受到加密后的字符串以后用公钥解密,若是正确就让客户端登陆,不然拒绝。这样就不用使用密码了。

 

2. 在查看进程的时候不要只看有没有,还要留意进程启动时间和启动的位置

 3.在进行Rundeck配置的时候要当心,不要复制粘贴的时候多了一个空格,否则会花费你很久去找问题!!!

 4.Jenkins读取不到环境变量能够用-ilex解决一样也能够,在脚本中给变量赋值。

 

相关文章
相关标签/搜索