Linux如何使用ssh自动化建立私钥和公钥登录服务器
Linux 快速建立ssh互信私钥和公钥教程 中,我们介绍了在Linux下如何使用ssh建立私钥和公钥登录服务器方法。
但是在实际工作中,往往机器很多,如果一台一台的去建立互信,则也需要耗费巨大的人力。
在网上看到一个自动化批量建立互信的脚本,在此分享给大家。
一、脚本
在主机上建立sh文件,名称随意,然后在文件中输入以下内容:
#!/bin/sh DEST_USER=$1 PASSWORD=$2 HOSTS_FILE=$3 if [ $# -ne 3 ]; then echo "Usage:" echo "$0 remoteUser remotePassword hostsFile" exit 1 fi SSH_DIR=~/.ssh SCRIPT_PREFIX=./tmp echo ===========================
# 1. prepare directory .ssh
mkdir $SSH_DIR chmod 700 $SSH_DIR
# 2. generat ssh key
TMP_SCRIPT=$SCRIPT_PREFIX.sh echo "#!/usr/bin/expect">$TMP_SCRIPT echo "spawn ssh-keygen -b 1024 -t rsa">>$TMP_SCRIPT echo "expect *key*">>$TMP_SCRIPT echo "send \r">>$TMP_SCRIPT if [ -f $SSH_DIR/id_rsa ]; then echo "expect *verwrite*">>$TMP_SCRIPT echo "send y\r">>$TMP_SCRIPT fi echo "expect *passphrase*">>$TMP_SCRIPT echo "send \r">>$TMP_SCRIPT echo "expect *again:">>$TMP_SCRIPT echo "send \r">>$TMP_SCRIPT echo "interact">>$TMP_SCRIPT chmod +x $TMP_SCRIPT /usr/bin/expect $TMP_SCRIPT rm $TMP_SCRIPT
# 3. generat file authorized_keys
cat $SSH_DIR/id_rsa.pub>>$SSH_DIR/authorized_keys
# 4. chmod 600 for file authorized_keys
chmod 600 $SSH_DIR/authorized_keys
echo ===========================
# 5. copy all files to other hosts
for ip in $(cat $HOSTS_FILE) do if [ "x$ip" != "x" ]; then echo ------------------------- TMP_SCRIPT=${SCRIPT_PREFIX}.$ip.sh # check known_hosts val=`ssh-keygen -F $ip` if [ "x$val" == "x" ]; then echo "$ip not in $SSH_DIR/known_hosts, need to add" val=`ssh-keyscan $ip 2>/dev/null` if [ "x$val" == "x" ]; then echo "ssh-keyscan $ip failed!" else echo $val>>$SSH_DIR/known_hosts fi fi echo "copy $SSH_DIR to $ip" echo "#!/usr/bin/expect">$TMP_SCRIPT echo "spawn scp -r $SSH_DIR $DEST_USER@$ip:~/">>$TMP_SCRIPT echo "expect *assword*">>$TMP_SCRIPT echo "send $PASSWORD\r">>$TMP_SCRIPT echo "interact">>$TMP_SCRIPT chmod +x $TMP_SCRIPT #echo "/usr/bin/expect $TMP_SCRIPT" >$TMP_SCRIPT.do #sh $TMP_SCRIPT.do& /usr/bin/expect $TMP_SCRIPT rm $TMP_SCRIPT echo "copy done." fi done echo done.
二、建立主机列表文件
新建主机列表文件,一行一个需要建立互信的IP。
示例如下:
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
三、启动程序及参数
运行刚才新建的.sh文件,脚本接受三个参数,远程机器用户名、密码和host文件名(相对路径或绝对路径均可)。
例如:
./auto_auth.sh app app ./hostList.cfg
脚本会生成pub公钥文件,并将公钥拷贝至指定主机。
Generating public/private rsa key pair.
Enter file in which to save the key (/cbss/app/.ssh/id_rsa):
/cbss/app/.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 /cbss/app/.ssh/id_rsa.
Your public key has been saved in /cbss/app/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6l4bndsVOxwTRe8So0Q/uRJ8FY5tbML1AGJTrn7dG94 app@resourcepool-0232-jkdd02
The key's randomart image is:
+---[RSA 2048]----+
| +.+..+=|
| . *..*=o|
| =+O*o|
| o ++B |
| S . o * .|
| . o . + B |
| . o + . *..|
| . . o + ...+|
| .o . . . oE|
+----[SHA256]-----+
公钥和私钥文件就生成成功了。
实验二:快速建立ssh互信私钥和公钥教程
一、环境介绍
(以下IP和用户名密码均为示例,非真实数据)
主机A:162.123.12.12
主机B:162.123.12.13
用户名和密码都是app
二、生成私钥和公钥
我们可以用如下命令来生成公钥和私钥:
ssh-keygen -t rsa
命令行会输出如下结果,如果机器之前已经生成过公钥和私钥,会提示你是否覆盖。
Generating public/private rsa key pair.
Enter file in which to save the key (/cbss/app/.ssh/id_rsa):
/cbss/app/.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 /cbss/app/.ssh/id_rsa.
Your public key has been saved in /cbss/app/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6l4bndsVOxwTRe8So0Q/uRJ8FY5tbML1AGJTrn7dG94 app@resourcepool-0232-jkdd02
The key's randomart image is:
+---[RSA 2048]----+
| +.+..+=|
| . *..*=o|
| =+O*o|
| o ++B |
| S . o * .|
| . o . + B |
| . o + . *..|
| . . o + ...+|
| .o . . . oE|
+----[SHA256]-----+
这样,公钥和私钥文件就生成成功了。
三、将公钥拷贝至目标服务器
我们想从机器A建立至机器B的互信,则需要将A的公钥拷贝至B机器上。
Linux下可以用ssh-copy-id命令快速拷贝公钥文件。
ssh-copy-id -i ~/.ssh/id_rsa.pub app@162.123.12.13
接下来会提示输入目标主机用户的密码,输入后按回车即可。
这样,A主机到B主机的ssh互信就建立好了。
测试一下,发现从A主机到B主机不需要再重新输入密码了。
$ ssh app@162.123.12.13
Authorized only. All activity will be monitored and reported
Last login: Wed Jul 26 09:21:14 2017 from 162.123.12.13
本文由 帝一博客 原创发布。用户在本站发布的原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。独家文章转载,请联系邮箱:17762131@qq.com。获得授权后,须注明本文地址: https://bubukou.com/mljb/1135.html
-
bat脚本批处理实现手动输入变量 参数
2019-09-18 13:06
-
企业Shell实战-MySQL分库分表备份脚本
2019-07-20 08:00
-
shell脚本统计所有人有总钱数awk脚本
2019-07-18 07:53
-
shell脚本硬件信息获取json数值输出
2019-07-17 07:54
-
Shell处理日志-保留30天,超过14天的压缩为gz格式
2019-07-17 07:54
-
Shell脚本简单入门教程
2019-07-17 07:53
-
mysql数据库批量插入数据shell脚本实现
2019-07-15 07:48
-
开发Shell脚本解决DOS安全Linux服务器生产案例
2019-07-15 07:48
-
老鸟教你如何监控网站URL是否正常
2019-07-15 07:47
-
Linux Shell系列教程Shell文件包含
2019-07-15 07:46
网友留言评论