SSH远程登录:两台或多台服务器之间免密登录设置--安装rsync
有两台(或多台)同局域网的服务器A:192.168.2.21,B:192.168.2.25。让A,B这两台服务器之间能两两互相免密登录,并且每台服务器都可以自我免密登录(自我免密登录即:ssh localhost 时不需要密码)。
iii、此时,服务器A可免密登录服务器器A了。验证:
在服务器A操作
用root把远程主机192.168.5.85上的目录/aa传送到本地主机/root下:
(scp -r /root/.ssh/* 192.168.5.85:/root/.ssh/)
这样就可以使本地服务器和192.168.5.85服务器之间互相免密登录了
(2)centOS:
查看状态
设置开机自启动
一、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目录下,并改名为bscp /root/a root@192.168.5.85:/root/b
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
检查是否安装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