1. 程式人生 > >SSH服務及其擴展(sshpass和expect)

SSH服務及其擴展(sshpass和expect)

參數 配置 pro ict 關於 script 如果 root get

SSH服務及其擴展(sshpass和expect)

Linux SSH服務一共包含三個工具:ssh、scp、sftp

[遠程連接及執行命令]

語法:ssh -p端口 賬號@IP 命令

參數說明:-o StrictHostKeyChecking=no //取消提示

-p 端口

2 示例:
ssh -p22 [email protected]
ssh -p22 [email protected] /sbin/ifconfig

[遠程拷貝:推送及拉取]

語法:scp -P端口 -r -p 源目錄 賬號@IP:目的目錄

參數說明:-r遞歸拷貝目錄 -p保持文件屬性 -l限速

2 示例:
scp -P22 -r -p /etc [email protected]:/tmp/
scp -P22 -r -p [email protected]:/tmp/ /etc

[安全的FTP功能]

語法:sftp -oPort=22 賬號@IP

參數說明:put上傳 get下載

2 示例:
sftp -oPort=22 [email protected]

[無密碼驗證,批量分發]

1、所有機器均需創建用戶及密碼

useradd distribution

echo 123456|passwd --stdin distribution

2、管理機創建密鑰(創建密鑰命令:ssh-keygen -t dsa)

非交換式創建密鑰:

echo -e "\n"|ssh-keygen -t dsa -N ""

3、管理機分發密鑰

ssh-copy-id -i .ssh/id_dsa.pub "-p 端口 賬號@IP"

4、編寫腳本(服務安裝、優化、批量創建賬號密碼)使用ssh遠程連接並執行命令達到批量管理的目的

———————————————————————————————————————

[/etc/ssh/sshd_config配置文件]

過濾掉註釋及空行:grep -nvE "#|^$" /etc/ssh/sshd_config

[sshd_config詳解]

# 1. 關於 SSH Server 的整體設定,包含使用的 port 啦,以及使用的密碼演算方式
Port 22          # SSH 預設使用 22 這個 port,您也可以使用多的 port !
              # 亦即重復使用 port 這個設定項目即可!
Protocol 2,1        # 選擇的 SSH 協議版本,可以是 1 也可以是 2 ,
              # 如果要同時支持兩者,就必須要使用 2,1 這個分隔了!
#ListenAddress 0.0.0.0   # 監聽的主機適配卡!舉個例子來說,如果您有兩個 IP,
              # 分別是 192.168.0.100 及 192.168.2.20 ,那麽只想要
              # 開放 192.168.0.100 時,就可以寫如同下面的樣式:
ListenAddress 192.168.0.100# 只監聽來自 192.168.0.100 這個 IP 的SSH聯機。
              # 如果不使用設定的話,則預設所有接口均接受 SSH
PidFile /var/run/sshd.pid # 可以放置 SSHD 這個 PID 的檔案!左列為默認值
LoginGraceTime 600     # 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,
              # 在該畫面中,在多久時間內沒有成功連上 SSH server ,
              # 就斷線!時間為秒!
Compression yes      # 是否可以使用壓縮指令?當然可以啰!
 
# 2. 說明主機的 Private Key 放置的檔案,預設使用下面的檔案即可!
HostKey /etc/ssh/ssh_host_key    # SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key  # SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key  # SSH version 2 使用的 DSA 私鑰

# 2.1 關於 version 1 的一些設定!
KeyRegenerationInterval 3600     # 由前面聯機的說明可以知道, version 1 會使用
                   # server 的 Public Key ,那麽如果這個 Public
                   # Key 被偷的話,豈不完蛋?所以需要每隔一段時間
                   # 來重新建立一次!這裏的時間為秒!
ServerKeyBits 768          # 沒錯!這個就是 Server key 的長度!

# 3. 關於登錄文件的訊息數據放置與 daemon 的名稱!
SyslogFacility AUTH         # 當有人使用 SSH 登入系統的時候,SSH會記錄資
                   # 訊,這個信息要記錄在什麽 daemon name 底下?
                   # 預設是以 AUTH 來設定的,即是 /var/log/secure
                   # 裏面!
                   # 其它可用的 daemon name 為:DAEMON,USER,AUTH,
                   # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO            # 登錄記錄的等級!

# 4. 安全設定項目!極重要!
# 4.1 登入設定部分
PermitRootLogin no    # 是否允許 root 登入!預設是允許的,但是建議設定成 no!
UserLogin no       # 在 SSH 底下本來就不接受 login 這個程序的登入!
StrictModes yes     # 當使用者的 host key 改變之後,Server 就不接受聯機,
             # 可以抵擋部分的木馬程序!
#RSAAuthentication yes  # 是否使用純的 RSA 認證!?僅針對 version 1 !
PubkeyAuthentication yes # 是否允許 Public Key ?當然允許啦!只有 version 2
AuthorizedKeysFile .ssh/authorized_keys
             # 上面這個在設定若要使用不需要密碼登入的賬號時,那麽那個
             # 賬號的存放檔案所在檔名!
# 4.2 認證部分
RhostsAuthentication no  # 本機系統不止使用 .rhosts ,因為僅使用 .rhosts 太
              # 不安全了,所以這裏一定要設定為 no !
IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是!
RhostsRSAAuthentication no # 這個選項是專門給 version 1 用的,使用 rhosts 檔案在
              # /etc/hosts.equiv配合 RSA 演算方式來進行認證!不要使用
HostbasedAuthentication no # 這個項目與上面的項目類似,不過是給 version 2 使用的!
IgnoreUserKnownHosts no  # 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄
              # 的主機內容?當然不要忽略,所以這裏就是 no 啦!
PasswordAuthentication yes # 密碼驗證當然是需要的!所以這裏寫 yes 啰!
PermitEmptyPasswords no  # 若上面那一項如果設定為 yes 的話,這一項就最好設定
              # 為 no ,這個項目在是否允許以空的密碼登入!當然不許!
ChallengeResponseAuthentication yes # 挑戰任何的密碼認證!所以,任何 login.conf
                   # 規定的認證方式,均可適用!
#PAMAuthenticationViaKbdInt yes # 是否啟用其它的 PAM 模塊!啟用這個模塊將會
                   # 導致 PasswordAuthentication 設定失效!
 
# 4.3 與 Kerberos 有關的參數設定!因為我們沒有 Kerberos 主機,所以底下不用設定!
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosTgtPassing no
 
# 4.4 底下是有關在 X-Window 底下使用的相關設定!
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes

# 4.5 登入後的項目:
PrintMotd no # 登入後是否顯示出一些信息呢?例如上次登入的時間、地點等
             # 等,預設是 yes ,但是,如果為了安全,可以考慮改為 no !
PrintLastLog yes     # 顯示上次登入的信息!可以啊!預設也是 yes !
KeepAlive yes       # 一般而言,如果設定這項目的話,那麽 SSH Server 會傳送
             # KeepAlive 的訊息給 Client 端,以確保兩者的聯機正常!
             # 在這個情況下,任何一端死掉後, SSH 可以立刻知道!而不會
             # 有僵屍程序的發生!
UsePrivilegeSeparation yes# 使用者的權限設定項目!就設定為 yes 吧!
MaxStartups 10      # 同時允許幾個尚未登入的聯機畫面?當我們連上 SSH ,
             # 但是尚未輸入密碼時,這個時候就是我們所謂的聯機畫面啦!
             # 在這個聯機畫面中,為了保護主機,所以需要設定最大值,
             # 預設最多十個聯機畫面,而已經建立聯機的不計算在這十個當中

# 4.6 關於使用者抵擋的設定項目:
DenyUsers *        # 設定受抵擋的使用者名稱,如果是全部的使用者,那就是全部
             # 擋吧!若是部分使用者,可以將該賬號填入!例如下列!
DenyUsers test
DenyGroups test      # 與 DenyUsers 相同!僅抵擋幾個群組而已!

# 5. 關於 SFTP 服務的設定項目!
Subsystem sftp /usr/lib/ssh/sftp-server

【拓展非交換式工具】

sshpass實現ssh的自動登陸

安裝:

yum install lrzsz -y

rz

tar -xf sshpass.tar.gz

cd sshpass-1.06

./configure

make

make install

sshpass -p 123456 ssh -p52113 -o StrictHostKeyChecking=no [email protected] /sbin/ifconfig

sshpass 參數 SSH命令(ssh,sftp,scp等)。
參數:

-p password //將參數password作為密碼。

-f passwordfile //提取文件passwordfile的第一行作為密碼。

-e //將環境變量SSHPASS作為密碼。

expect實現非交互分發公鑰

安裝:

yum install -y expect

vim /server/scripts/distribution_id_dsa_pub.exp

#!/usr/bin/expect

set timeout 30

spawn ssh-copy-id -i .ssh/id_dsa.pub "-p 52113 [email protected]"

expect "password:"

send "123456\r"

interact

expect /server/scripts/distribution_id_dsa_pub.exp

SSH服務及其擴展(sshpass和expect)