一、常用场景
1、我们经常使用scp命令在两台不同服务器之间进行文件传输,但每执行一次scp命令时,都需要输入一次密码;使用ssh命令远程连接另一台服务器时,也需要输入密码。频繁输入密码比较麻烦,ssh可帮助我们在两台服务器之间配置免密,避免频繁输入密码的问题。
2、jekins自动集成需要自动上传包的情况
二、原理
(一)SSH概念
SSH为Secure Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录,很多ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而SSH就是专为远程登录会话和其他网络服务提供安全性的协议。
SSH是由客户端和服务端的软件组成的 服务端是一个守护进程(sshd),他在后台运行并响应来自客户端的连接请求。 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
(二)SSH认证机制
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证) 只要你知道自己帐号和口令,就可以登录到远程主机。
第二种级别(基于密钥的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密”质询”(challenge)并把它发送给客户端软件。客户端软件收到”质询”之后就可以用你的私人密匙解密再把它发送给服务器。
二、操作
(一)生成密钥
通过ssh-keygen生成密钥
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
执行过后,会在/root/.ssh目录下生成两个文件id_rsa和id_rsa.pub,分别对应密钥和公钥。
(二)拷贝密钥
通过ssh-copy-id拷贝密钥。
ssh-copy-id root@192.168.1.10
根据提示输入yes和密码继续建立连接,第一次连接还是需要输入密码的
(三)免密登录
通过ssh登录目标主机
ssh root@192.168.1.10
此时已不再要求输入密码,直接登录上了
1、ssh 客户端用户名@服务器ip地址。
ssh user@192.168.1.10
2、调用图形界面程序可以使用 -X 选项。
ssh -X user@192.168.1.10
3、用户名和服务器的用户名相同,登录时可以省略用户名。
ssh 192.168.1.10
4、设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号。
ssh -p 8080 user@192.168.1.10
(四) 双向免密
在另一台服务器上同样执行步骤一、二、三。
(五)自身免密
在shell中使用ssh登录自己时,也会要求输入密码,可通过如下命令实现自身免密。
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub >> authorized_keys
执行过后,再次连接自己,执行ssh localhost
此时也无需输入密码。