SSHバッチパスワードなしのログイン

実際の本番環境には、GFS分散ファイルシステム、ansibleなど、パスワードなしのログインを使用する必要のある場所がたくさんあります。パスワードなしのログインが必要なホストが少ない場合は、コマンドを使用してパスワードなしで各ホストデバイスにログインできます。パスワードなしでログインする必要のあるホストが多数ある場合は、パスワードなしのログインを設定します。ホストごとに非常に煩わしいです。現時点では、パスワードなしのバッチログインを実現するためのスクリプトが必要です。

sshパスワードなしのログインの原則の紹介

仮定すると、PC1はにログインしようとPC2パスワードなしでSSH 、その後、PC1(鍵のペアを作成するために、最初のニーズssh-keygen -t rsa)、その後に公開鍵をコピーPC2をssh-copy-id root@PC2IP地址

今回ls -lAは、ホームディレクトリ内の隠しファイルを表示するために使用できます。ディレクトリを表示
ここに画像の説明を挿入します
する.sshために入力する
ここに画像の説明を挿入します
、デバイス15は高密度のログインデバイス16を避けたいと想定され、コンテンツデバイス15id_rsa.pub16の機能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.txtIPアドレスを、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

シークレットなしで正常にログインしたホストを表示する

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_50345511/article/details/112657429