SSH远程登录:两台或多台服务器之间免密登录设置--安装rsync

有两台(或多台)同局域网的服务器A:192.168.2.21,B:192.168.2.25。让A,B这两台服务器之间能两两互相免密登录,并且每台服务器都可以自我免密登录(自我免密登录即:ssh localhost 时不需要密码)。

一、ssh原理详解

SSH验证方式主要有以下两种:
1、基于口令的验证
2、基于密钥的验证

 

 二、初级SSH互相发送密钥登录

1、让服务器A实现免密登录自己

i、在A服务器中指定的位置(/root/.ssh)生成私钥id_rsa和公钥id_rsa.pub;
在服务器A操作

cd /root/.ssh
ssh-keygen -t rsa

一路回车键,可看到如下图生成的私钥和公钥,此时服务器A的私钥已经生成。

ii、在服务器A中把公钥id_rsa.pub追加到服务器A管理密码登录权限的文件(authorized_keys)中。

cat id_rsa.pub >> authorized_keys

iii、此时,服务器A可免密登录服务器器A了。验证:

2、让服务器A实现免密登录服务器B

i、把服务器A的公钥id_rsa.pub复制到服务器A要免密登录的那台服务器(即B)中的指定位置(/root/.ssh);
在服务器A操作
scp id_rsa.pub 192.168.2.25:/tmp


ii、在服务器B中把公钥id_rsa.pub追加到服务器B管理密码登录权限的文件(authorized_keys)中。
在服务器B操作

cd /root/.ssh
cat /tmp/id_rsa.pub >> authorized_keys

此时,服务器A的公钥(登录服务器B的权限)追加到服务器B中的权限文件authorized_keys中,服务器A可免密登录服务器器B了。
原因:因为此时服务器B的密码登录权限文件authorized_keys中已经有服务器A的公钥,即A获得了B的登录权限。
iii、验证:
在服务器A中操作

ssh 192.168.2.25


登录已经不需要密码了。

3、让服务器B实现免密登录服务器A

和步骤2是一样的操作。

4、scp:不同主机之间传输文件

把本地文件/root/a传送到远程主机192.168.5.85/root目录下,并改名为b
scp /root/a root@192.168.5.85:/root/b
root把远程主机192.168.5.85上的目录/aa传送到本地主机/root下:
scp -r root@192.168.5.85:/root/aa /root

 三、进阶版SSH互相发送密钥登录

 1、在A服务器中指定的位置(/root/.ssh)生成私钥id_rsa和公钥id_rsa.pub;

# 不提示直接生成密钥 -f指定了生成文件的文件名 -P指定了无密码
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

2、把服务器A的公钥id_rsa.pub复制到服务器A要免密登录的那台服务器(即B)中的指定位置(/root/.ssh);

ssh-copy-id 192.168.2.25

3、ssh一台服务器到其它服务器免密登录的脚本实现

#!/bin/bash
# ssh设置免密登录 

# 发送密钥的函数
auto_ssh_copy_id () {
   expect -c "set timeout -1;
              spawn ssh-copy-id $1;
              expect {
                      *(yes/no)* {send -- yes\r;exp_continue;}
                      *password:* {send -- $2\r;exp_continue;}
                      eof  {exit 0;}
              }";
}
# yum -y install expect
echo -e "\n***********生成密钥*************"
if [ ! -f ~/.ssh/id_rsa ]; then
   # 不提示直接生成密钥 -f指定了生成文件的文件名 -P指定了无密码
   ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
else
   echo "id_rsa already exist"
fi

PASS=123456 # 需要修改密码
#for ((IP=5; IP<=8; IP++))
for IP in 5 6 7 8   # 需要添加IP
do
   echo -e "\n******向192.168.109.$IP发送密钥******"
   auto_ssh_copy_id 192.168.109.$IP $PASS
done

四、高阶版SSH互相发送密钥登录

同步.ssh目录就可以了
(scp -r /root/.ssh/* 192.168.5.85:/root/.ssh/)
这样就可以使本地服务器和192.168.5.85服务器之间互相免密登录了
#!/bin/bash
# ssh设置免密登录 需要修改密码和IP

# 发送密钥的函数
auto_ssh_copy_id () {
   expect -c "set timeout -1;
	      spawn rsync -a /root/.ssh/ $1:/root/.ssh/;
	      expect {
                      *(yes/no)* {send -- yes\r;exp_continue;}
                      *password:* {send -- $2\r;exp_continue;}
		      eof  {exit 0;}
              }";
}
# yum -y install expect
echo -e "\n***********生成密钥*************"
if [ ! -f ~/.ssh/id_rsa ]; then
   # 不提示直接生成密钥 -f指定了生成文件的文件名 -P指定了无密码
   ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
else
   echo "id_rsa already exist"
fi 

PASS=123456 # 需要修改密码

echo -e "\n***********向本机发送密钥*************"
my_ip=$(hostname -I |awk '{print $1}')
expect << EOF
   #set timeout 5;
   spawn ssh-copy-id $my_ip;
   expect {
           "*yes/no*" {send "yes\r";exp_continue;}
           "*assword*" {send "$PASS\r";exp_continue;}
           eof  {exit 0;}
          }
EOF

#for ((IP=1; IP<=10; IP++))
for IP in 133 134 135   # 需要添加IP
do
   echo -e "\n******向192.168.102.$IP发送密钥******"
   auto_ssh_copy_id 192.168.102.$IP $PASS
done 

 五、root无法通过xshell、xftp远程连接服务器

1、安装ssh服务

(1)Debian:
apt update -y
apt install ssh
(2)centOS:
检查是否安装ssh:
yum list installed | grep openssh-server
如果没有任何输出显示表示没有安装ssh

安装ssh:
yum install openssh-server  

2、编辑配置文件

vim /etc/ssh/sshd_config

将#PermitRootLogin prohibit-password的注释去掉,设置为yes

将#PasswordAuthentication no的注释去掉,并且设置为yes

PermitRootLogin no # no代表禁止root用户直接远程连接
PasswordAuthentication no # no代表禁止使用密码的方式连接

3、开启 ssh/sshd 服务

systemctl start ssh  /   systemctl start sshd
查看状态
systemctl status ssh  /  systemctl status sshd 
设置开机自启动
systemctl enable ssh  /  systemctl enable sshd

六、安装rsync

1、下载地址:

https://rsync.samba.org/  或  https://download.samba.org/pub/rsync/src/

2、解压编译安装

tar -zxvf rsync-3.2.6.tar.gz
./configure --prefix=/usr/local/rsync
make
make install

3、配置环境变量

vim /etc/profile
PATH=$PATH:/usr/local/rsync/bin
source /etc/profile

rsync --version

 

  

  

 

 

 

  

 

posted @ 2022-05-05 20:54  惊小呆  阅读(1306)  评论(0编辑  收藏  举报