SSH服务:

SSH服务:

ssh: secure shell, protocol, 22/tcp, 安全的远程登录

具体的软件实现:

OpenSSH: ssh协议的开源实现,CentOS默认安装

dropbear:另一个开源实现

SSH协议版本

v1: 基于CRC-32做MAC,不安全;man-in-middle

v2:双方主机协议选择安全的MAC方式

基于DH算法做密钥交换,基于RSA或DSA实现身份认证

两种方式的用户登录认证:

基于password

基于key

-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。

ssh加密通讯

基于用户和口令登录验证
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则
用户登录成功

 ssh服务登录验证

ssh服务登录验证方式:

用户/口令

基于密钥

ssh服务登录验证

基于密钥的登录方式

1 首先在客户端生成一对密钥(ssh-keygen)

2 并将客户端的公钥ssh-copy-id 拷贝到服务端

3 当客户端再次发送一个连接请求,包括ip、用户名

4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP

和用户,就会随机生成一个字符串。

5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的

字符串发送给服务端

7 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,

就允许免密码登录

基于密钥的登录方式

Linux 两台主机之间建立信任(ssh免密登录-即基于Key验证)

背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系。

在整理之前,我先说下ssh免密码的要点 : 

你想免密码登陆到哪个主机哪个用户, 就把你自己的公钥文件内容追加到远程主机对应用户下的authorized_keys文件中即可,对面如果没有,远程复制过去就会自动创建此authorized_keys文件,并将公钥信息存在里边。

第一种方法:

第一步:ssh-keygen  -t  rsa  -P "" -f /root/.ssh/id_rsa 先创建秘钥对。

[[email protected]]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:
SHA256:4mYhhq/jjhz8I1QWudKRODsR6R1FnxLFFeh1YJ1+YiM [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .+ =+o.o=+ . |
| = * ooo. + |
|. * =..o. o |
| = B .. E = . |
| * o o S o + |
|.. o o o |
|.o . + |
|.o+o o |
|.+=o. |
+----[SHA256]-----+

生成的公私钥对在/root/.ssh目录下:文件名分别为id_rsa.pub(公钥)id_rsa(私钥)

第二步:

1、ssh-copy-id -i /root/.ssh/id_rsa.pub   192.168.34.101    将客户端的IP公钥传送到服务器端(192.168.34.101) 其中-i是指定自己当前的路径文件

 2、或者ssh-copy-id  192.168.34.101   (centos6/7默认会将本地的公钥文件直接复制过去,也不需要指定当前的路径和-i)

第三步:

就进行测试连接服务器端的IP地址,就不需要密码登陆:ssh 192.168.34.101

同理将对方的的公钥复制到本机上,对方连本机也不需要输入密码,只需要输入本机私钥的密码即可。

完成免密登录直接可以在对方机器做操作:

如: ssh 192.168.34.100 useradd wang  在对方机器上创建wang账号

 

重要:如果远程机器有本机的私钥文件,且本机已对私钥加密,本地想远程多个主机每次都需要输入私钥密码。

我们可以将其进行托管至代理服务即可,两条命令可以解决,但是退出代理之后,下次需要再连接时还需要输入私钥口令。

将私钥加密之后再连接需要输入私钥加密口令,比较麻烦:

ssh  192.168.34.100

输入托管代理命令之后,就不需要再输入私钥加密口令,具体操作如下:

ssh-agent bash

ssh-add

[root@R1 .ssh]# ssh-agent bash
[root@R1 .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@R1 .ssh]# ssh 192.168.34.100
Last login: Tue Oct 22 21:47:24 2019 from 192.168.34.200
[root@centos6~]#

注意:

  •   如果远程主机的端口非22端口,需要指定-p port选项。
  •   ssh-copy-id是由openssh-clients包提供,没有这个命令可以安装这个包。

第二种方法: 

1)每个客户端都生成公私钥文件:

ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa(注:有几个主机,就在每个主机上执行几次)

2)将所有远程机器的公钥都复制到当前自己的文件下authorized_keys:

机器一进行公钥复制:ssh-copy-id  -i /root/.ssh/id_rsa_pub  192.168.34.100(注:该ip为本地地址)

机器二进行公钥复制:ssh-copy-id  -i /root/.ssh/id_rsa_pub   192.168.34.100

最后本机将自己的公钥文件也放入到authorized_keys中

ssh-copy-id  192.168.34.100

3)然后将本地的IP地址复制到远程机器上,实现所有的机器都有对方的公钥,也可以进行登录不需要秘钥登录:

ssh-copy-id  -i /root/.ssh/authorized   机器一的IP地址

ssh-copy-id  -i /root/.ssh/authorized   机器二的IP地址

最终结果:本地机器与其他主机连接一起就会免密,远程主机与本地主机连接也会免密。

实现一个循环创建秘钥对并将公钥传送到对方的脚本:

cat iplist.txt

192.168.34.100

192.168.34.101

192.168.34.102

user=lisi
password=zhangsan
ssh-keygen -t rsa -p ""  -f /root/.ssh/id_rsa

while read ip ;do
expect  <<EOF
set timeout 10
spawn  ssh-copy-id -i /root/.ssh/id_rsa.pub  $user@$ip
expect {
"yes/no"   {send  "yes\n";exp_continue }
"password"  { send  "$password\n" }
}
expect  eof
EOF
done  < iplist.txt 

 

背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系。

在整理之前,我先说下ssh免密码的要点 : 

你想免密码登陆到哪个主机哪个用户, 就把你自己的公钥文件内容追加到远程主机对应用户下的authorized_keys文件中即可,对面如果没有,远程复制过去就会自动创建此authorized_keys文件,并将公钥信息存在里边。

第一种方法:

第一步:ssh-keygen  -t  rsa  -P "" -f /root/.ssh/id_rsa 先创建秘钥对。

[[email protected]]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:
SHA256:4mYhhq/jjhz8I1QWudKRODsR6R1FnxLFFeh1YJ1+YiM [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .+ =+o.o=+ . |
| = * ooo. + |
|. * =..o. o |
| = B .. E = . |
| * o o S o + |
|.. o o o |
|.o . + |
|.o+o o |
|.+=o. |
+----[SHA256]-----+

生成的公私钥对在/root/.ssh目录下:文件名分别为id_rsa.pub(公钥)id_rsa(私钥)

第二步:

1、ssh-copy-id -i /root/.ssh/id_rsa.pub   192.168.34.101    将客户端的IP公钥传送到服务器端(192.168.34.101) 其中-i是指定自己当前的路径文件

 2、或者ssh-copy-id  192.168.34.101   (centos6/7默认会将本地的公钥文件直接复制过去,也不需要指定当前的路径和-i)

第三步:

就进行测试连接服务器端的IP地址,就不需要密码登陆:ssh 192.168.34.101

同理将对方的的公钥复制到本机上,对方连本机也不需要输入密码,只需要输入本机私钥的密码即可。

完成免密登录直接可以在对方机器做操作:

如: ssh 192.168.34.100 useradd wang  在对方机器上创建wang账号

 

重要:如果远程机器有本机的私钥文件,且本机已对私钥加密,本地想远程多个主机每次都需要输入私钥密码。

我们可以将其进行托管至代理服务即可,两条命令可以解决,但是退出代理之后,下次需要再连接时还需要输入私钥口令。

将私钥加密之后再连接需要输入私钥加密口令,比较麻烦:

ssh  192.168.34.100

输入托管代理命令之后,就不需要再输入私钥加密口令,具体操作如下:

ssh-agent bash

ssh-add

[root@R1 .ssh]# ssh-agent bash
[root@R1 .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@R1 .ssh]# ssh 192.168.34.100
Last login: Tue Oct 22 21:47:24 2019 from 192.168.34.200
[root@centos6~]#

注意:

  •   如果远程主机的端口非22端口,需要指定-p port选项。
  •   ssh-copy-id是由openssh-clients包提供,没有这个命令可以安装这个包。

第二种方法: 

1)每个客户端都生成公私钥文件:

ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa(注:有几个主机,就在每个主机上执行几次)

2)将所有远程机器的公钥都复制到当前自己的文件下authorized_keys:

机器一进行公钥复制:ssh-copy-id  -i /root/.ssh/id_rsa_pub  192.168.34.100(注:该ip为本地地址)

机器二进行公钥复制:ssh-copy-id  -i /root/.ssh/id_rsa_pub   192.168.34.100

最后本机将自己的公钥文件也放入到authorized_keys中

ssh-copy-id  192.168.34.100

3)然后将本地的IP地址复制到远程机器上,实现所有的机器都有对方的公钥,也可以进行登录不需要秘钥登录:

ssh-copy-id  -i /root/.ssh/authorized   机器一的IP地址

ssh-copy-id  -i /root/.ssh/authorized   机器二的IP地址

最终结果:本地机器与其他主机连接一起就会免密,远程主机与本地主机连接也会免密。

实现一个循环创建秘钥对并将公钥传送到对方的脚本:

cat iplist.txt

192.168.34.100

192.168.34.101

192.168.34.102

user=lisi
password=zhangsan
ssh-keygen -t rsa -p ""  -f /root/.ssh/id_rsa

while read ip ;do
expect  <<EOF
set timeout 10
spawn  ssh-copy-id -i /root/.ssh/id_rsa.pub  $user@$ip
expect {
"yes/no"   {send  "yes\n";exp_continue }
"password"  { send  "$password\n" }
}
expect  eof
EOF
done  < iplist.txt 

 

猜你喜欢

转载自www.cnblogs.com/struggle-1216/p/11722367.html