如果要使用ssh批量登入到其它系統上操作時,我們會採用迴圈的方式去處理,那麼這裡存在乙個巨大坑,你必須要小心了。
現在是想用乙個指令碼獲取遠端伺服器端/root下面的檔案:
1#!/bin/bash
23 cat 'ip
.txt
'|while
read line;do
4echo $line
5 access=`ssh $line "
ls /root/
"`
6 done
結果: 指令碼只對第乙個ip做了檢測,就直接跳迴圈。
問題分析:
while使用重定向機制,ip.txt檔案中的資訊都已經讀入並重定向給了整個while語句,所以當我們在while迴圈中再一次呼叫read語句,就會讀取到下一條記錄。問題就出在這裡,ssh語句正好回讀取輸入中的所有東西。為了禁止ssh讀所有東西增加乙個< /dev/null,將ssh 的輸入重定向輸入。
解決策略:
1、使用for迴圈代表while,因為for沒有一次把檔案內容快取獲取過來,**段修改如下:
1for ip in
`cat ip.txt`; do
2echo $ip
3 access=`ssh $ip "
ls /root/ "`
4echo $access
5 done
2、若堅持使用while迴圈,那麼需要對ssh增加-n引數,為什麼增加了-n引數也可以解決問題呢?通過man ssh檢視-n引數的說明
redirects stdin from /dev/null (actually, prevents reading from stdin)
1#!/bin/bash
23 cat '
ip.txt
'|while
read line;do
4echo $line
5 access=`ssh -n $line "
ls /root/ "`
6 done
linux使用ssh免密碼遠端登陸到別的機子
1 在你的自己的機器 主控端 下面使用ssh keygen命令來實現建立公鑰,使用 ssh keygen t rsa 來建立,程式會問你存放的目錄,如果不需要修改,直接回車幾次即可 2 將你 ssh目錄中的id rsa.pub這個檔案拷貝到你要登入的伺服器 被控端 的 ssh目錄中,然後再執行以下命...
Linux使用scp遠端拷貝使用ssh免密登入
linux使用scp遠端拷貝使用ssh免密登入 需求實現不同伺服器之間互傳檔案 scp命令 18.1.命令格式 scp 引數 原路徑 目標路徑 18.2.命令引數 1 強制scp命令使用協議ssh1 2 強制scp命令使用協議ssh2 4 強制scp命令只使用ipv4定址 6 強制scp命令只使用i...
Linux下使用SSH進行遠端登入
1.介紹 首先ssh是什麼?ssh secure shell 是linux unix mac及其他網路裝置最常用的遠端cli管理協議,ssh使用秘鑰對資料進行加密,保證了遠端管理資料的安全性。ssh2是現在廣泛使用的ssh版本 ssh協議使用tcp協議,埠號為22 openssh是ssh的乙個開源程...