windows/linux中shell自動登入ssh並執行一些命令

來源:互聯網
上載者:User

這裡介紹了像是任務計劃一樣,可以利用shell命令自動登入ssh並且執行我人定義好的任務哦,有需要的朋友可參考一下。

ssh安全的自動登入


A為本地主機(即用於控制其他主機的機器) ;
B為遠程主機(即被控制的機器Server), 假如ip為172.24.253.2 ;
A和B的系統都是Linux

在A上的命令:

 代碼如下 複製代碼
# ssh-keygen -t rsa (連續三次斷行符號,即在本地產生了公開金鑰和私密金鑰,不設定密碼)
# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh" (需要輸入密碼)
# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub (需要輸入密碼)

在B上的命令:

 代碼如下 複製代碼
# touch /root/.ssh/authorized_keys2 (如果已經存在這個檔案, 跳過這條)
# cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys2 (將id_rsa.pub的內容追加到 authorized_keys2 中)

回到A機器:

 代碼如下 複製代碼
# ssh root@172.24.253.2 (不要求輸入密碼, 登入成功)

如果能保護好自己的私密金鑰, 這種方法相對在shell上輸入密碼, 要安全一些

執行個體

任務描述:
使用shell指令碼登入遠程伺服器,並執行命令:添加反向 Proxy網站。Windows使用者的方法見文末。

範例程式碼的功能:
登入遠程linux伺服器並在上邊執行命令後返回當前linux主機,執行的命令為“在遠程伺服器上執行一個添加反向 Proxy網站的命令”。添加網站需要知道網域名稱,所以這個指令碼有一個參數,這個參數就是網域名稱。

範例程式碼的用法:

 代碼如下 複製代碼

 raps.sh xxxxx.com
raps.sh代碼:

#!/usr/bin/expect
# 名稱:Remote Add Proxy Site,^_^
# 說明:自動登上遠程伺服器後添加反向 Proxy網站(配置內建)
# 注意:需要傳遞一個網域名稱參數,指令碼中的proxySiteAdd是遠程伺服器上的添加網站工具
# 用法:raps xxxx.com
# 2012-11-02 08:55:21
 
# 配置
set user upall
set passwd upall@remote
set server 158.164.198.210
set port 2222
set dn [lindex $argv 0]
 
# 登入並執行命令
spawn ssh $user@$server -p $port
expect "password:"
send "${passwd}n"
expect "]# "
send "proxySiteAdd ${dn}n"
expect "]# "
exit

補充:

1、“expect "]# "”用於接收終端輸出,如果輸出中有“]# ”標誌就往下繼續執行命令;send 用於在遠程伺服器上執行命令。

2、傳遞參數時不能直接使用“$1”、“$2”,“set dn [lindex $argv 0]”會把第0個參數賦值給$dn,若是“set dn [lindex $argv 2]”會把第3個參數賦值給$dn。

 代碼如下 複製代碼

#!/bin/bash
HTTPD_CONF="/etc/httpd/conf/vhosts.conf"
# 產生apache虛擬機器主機設定檔(反向 Proxy)
echo "<VirtualHost *:80>">> $HTTPD_CONF
echo "        ServerName www.$1">> $HTTPD_CONF
echo "        ServerAlias $1">> $HTTPD_CONF
echo "        ProxyRequests Off">> $HTTPD_CONF
echo "        <Proxy *>">> $HTTPD_CONF
echo "                Order deny,allow">> $HTTPD_CONF
echo "                Allow from all">> $HTTPD_CONF
echo "        </Proxy>">> $HTTPD_CONF
echo "        ProxyPass / http://$1.demo.upall.cn/">> $HTTPD_CONF
echo "        ProxyPassReverse / http://$1.demo.upall.cn/">> $HTTPD_CONF
echo "</VirtualHost>">> $HTTPD_CONF
echo "CONF: "$HTTPD_CONF
#### 下邊的代碼是跳轉用的,如果不想使用反向 Proxy可以用下邊的代碼取代上邊的
# 產生apache虛擬機器主機設定檔(跳轉)
#echo "<VirtualHost *:80>">> $HTTPD_CONF
#echo " ServerName www.$1">> $HTTPD_CONF
#echo " ServerAlias $1">> $HTTPD_CONF
#echo " Redirect / http://$1.demo.upall.cn/">> $HTTPD_CONF
#echo "</VirtualHost>">> $HTTPD_CONF


Windows使用者的解決辦法

可以使用plink.exe實現這個功能,樣本:

 代碼如下 複製代碼

1 plink -pw yourPassword root@123.123.123.123 -P 23 doSomething.sh

<完>

該功能會加到這個指令碼這裡:。


深入一點點:

從表面上簡單的理解一下登入的過程,
首先 ssh-keygen -t rsa 命令產生了一個密鑰和一個公開金鑰, 而且密鑰可以設定自己的密碼
可以把密鑰理解成一把鑰匙, 公開金鑰理解成這把鑰匙對應的鎖頭,
把鎖頭(公開金鑰)放到想要控制的server上, 鎖住server, 只有擁有鑰匙(密鑰)的人, 才能開啟鎖頭, 進入server並控制
而對於擁有這把鑰匙的人, 必需得知道鑰匙本身的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設定密碼), 這樣就可以防止鑰匙被了配了(私密金鑰被人複製)

當然, 這種例子只是方便理解罷了,
擁有root密碼的人當然是不會被鎖住的, 而且不一定只有一把鎖(公開金鑰), 但如果任何一把鎖, 被人用其對應的鑰匙(私密金鑰)開啟了, server就可以被那個人控制了
所以說, 只要你曾經知道server的root密碼, 並將有root身份的公開金鑰放到上面, 就可以用這個公開金鑰對應的私密金鑰"開啟" server, 再以root的身分登入, 即使現在root密碼已經更改!

如果想控制n個機器, 那就需要n對鑰匙(密鑰和公開金鑰), ssh-keygen 命令可以隨意更改鑰匙對的名字, 比如:

 代碼如下 複製代碼
[root@wwy .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.102.12
......

這樣私密金鑰和公開金鑰的名字分別就是:
id_rsa_192.168.102.12 和 id_rsa_192.168.102.12.pub
然後將 id_rsa_192.168.102.12.pub 檔案的內容, 追加到sever的 ~/.ssh/authorized_keys2 檔案中,

最後, 在本地用ssh命令的 -i 參數指定本地密鑰, 並登入:
# ssh -i /root/.ssh/id_rsa_192.168.102.12 192.168.102.12

如果密鑰設定了密碼, 就用密鑰的密碼登入, 沒設密碼, 就直接登入進去了

scp也是一樣的
如:
scp -i /root/.ssh/id_rsa  ./xxx 192.168.102.158:/home/wwy/bak

這種不需密碼的不安全,下面看一個更安全的

首先產生一個新的ssh金鑰組

 代碼如下 複製代碼

[guo@guo zuo]$ ssh-keygen -f id_ras -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ras.
Your public key has been saved in id_ras.pub.
The key fingerprint is:
17:ca:c3:37:8f:60:86:42:d0:0d:b7:4d:70:a1:b2:a3 guo@guo
The key's randomart image is:
+--[ RSA 2048]----+
|  ...oo.+.       |
|   ....*         |
|    o o . .      |
|   . o + . .     |
|    + . S +      |
|   . o o = +     |
|  E       . .    |
|                 |
|                 |
+-----------------+

當程式詢問密碼時按【enter】鍵,表示不設密碼,此時會在工作目錄中產生私密金鑰,密碼檔案名稱為is_rsa,以及公開金鑰檔案id_psa.pub。

[guo@guo zuo]$ ls id*

id_ras  id_ras.pub

接下來把一個公開金鑰複製到遠程主機

 代碼如下 複製代碼

[guo@guo zuo]$ ssh-copy-id root@222.24.21.61
root@222.24.21.61's password:
Now try logging into the machine, with "ssh 'root@222.24.21.61'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

這一次需要輸入密碼。但是以後就不用再輸入密碼了。

[guo@guo zuo]$ ssh-copy-id root@222.24.21.61
root@222.24.21.61's password:
Now try logging into the machine, with "ssh 'root@222.24.21.61'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

接下來執行指令碼。

[guo@guo zuo]$ cat guossh.sh
#!/bin/sh
ssh root@222.24.21.61
[guo@guo zuo]$ sh guossh.sh
Last login: Sun Nov 13 20:28:30 2011 from 222.24.21.61
[root@guo ~]#

現在已經登入上了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.