実際の本番環境には、GFS分散ファイルシステム、ansibleなど、パスワードなしのログインを使用する必要のある場所がたくさんあります。パスワードなしのログインが必要なホストが少ない場合は、コマンドを使用してパスワードなしで各ホストデバイスにログインできます。パスワードなしでログインする必要のあるホストが多数ある場合は、パスワードなしのログインを設定します。ホストごとに非常に煩わしいです。現時点では、パスワードなしのバッチログインを実現するためのスクリプトが必要です。
sshパスワードなしのログインの原則の紹介
仮定すると、PC1はにログインしようとPC2とパスワードなしでSSH 、その後、PC1(鍵のペアを作成するために、最初のニーズssh-keygen -t rsa
)、その後に公開鍵をコピーPC2を(ssh-copy-id root@PC2IP地址
)
今回ls -lA
は、ホームディレクトリ内の隠しファイルを表示するために使用できます。ディレクトリを表示
する.ssh
ために入力する
と、デバイス15は高密度のログインデバイス16を避けたいと想定され、コンテンツ内のデバイス15id_rsa.pub
と16の機能authorized_keys
は同じ
sshログインスクリプトフリーです。秘密
[root@15 ~]# vim ssh_patch.sh
#!/bin/bash
#ssh批量免密登录
#你需要新建一个host_ip.txt的文件,用于存放IP地址
#你需要修改下面的密码
password=123456
#判断有没有安装expect,没有则安装
if ! rpm -q expect > /dev/null
then
echo "###expect 未安装,现在安装###"
yum install -y expect &>/dev/null
if [ $? -ne 0 ]
then
echo "###expect 安装失败###"
exit 1
fi
fi
#生成ssh密钥对
/usr/bin/expect <<-EOF
spawn ssh-keygen -t rsa
expect "(/root/.ssh/id_rsa)" {
send "\r"}
expect "(empty for no passphrase)" {
send "\r"}
expect "again" {
send "\r"}
expect eof
EOF
#从host_ip.txt文件中获取主机IP地址信息
for IP in $(more host_ip.txt)
do
if [ -n $IP ]
then
/usr/bin/expect <<-EOF
spawn ssh-copy-id root@$IP
expect "yes/no" {
send "yes\r"}
expect "password" {
send "$password\r"}
expect eof
EOF
else
echo "The IP is NULL !!!"
fi
done
パスワードなしのログインが必要なホストのhost_ip.txt
IPアドレスを、1行に1つのIPアドレスの形式で入力します
[root@15 ~]# vi host_ip.txt
20.0.0.26
20.0.0.27
スクリプトを実行する方法は2つあります。1つは情報を表示する方法、もう1つは情報を表示しない方法です。ホストが多い場合は、2番目の方法を使用できます。
①スクリプトを直接実行すると、実行情報が表示され、情報が多く、エラーメッセージが表示されます。
. ssh_patch.sh
②出力を/ dev / nullにリダイレクトします。情報は表示されません
. ssh_patch.sh &> /dev/null
シークレットなしで正常にログインしたホストを表示する