2013-09-23 97 views
2

嘿,我是全新的Unix,我需要寫一個「shell腳本」(?)來連接到另一個終端並運行一些SQL查詢。我到底怎麼做到這一點?我一直在瀏覽這個板子和其他板子的一些答案,如果我找到了我的答案,我不理解它。Unix沒有密碼的SSH

我能夠手動連接,輸入密碼等,但我需要自動化該過程。我無法訪問Perl(正如一些答案所建議的),我無法編輯etc/shadow文件。所以我認爲這必須嚴格通過Unix本身來完成。這是我目前使用的:

X=`vUser='USER-NAME' 
vPass='PASSWORD' 
vTable='TABLENAME' 

vHOST='HOST-NAME' 

vPORT=4443 

ssh [email protected] 
expect { 
    "[email protected] password:"{ 
     send -s "'vPass'\r" 
    } 
} 

SQL_Query='select * from vTable limit 10' 

mysql -p$vPASS -D$vTable -u$vUser P$vPort<<EOF 

$SQL_Query 
EOF` 
echo $X>Output.dat 

請詳細解釋所有的答案。我正在嘗試學習。

+2

您可能只是想創建一個無密碼的SSH密鑰對:http://linuxconfig.org/passwordless-ssh 但要小心,您的腳本似乎要以root身份連接到遠程計算機。你真的不應該那樣做,而且你**尤其不應該使用無密碼的密鑰對。 – Mike

+0

是的。在這種情況下,你不應該使用密碼。您也可以在接受的答案中找到創建SSH密鑰的方法[此處](http://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password)。 – Rik

+0

通過ssh禁用root訪問通常被認爲是很好的做法。 – symcbean

回答

1

試試這個:

  1. 您的SSH 公共密鑰複製到剪貼板中(的cat ~/.ssh/id_rsa.pub輸出)。如果您沒有SSH密鑰對,請使用this tutorial生成它。
  2. 粘貼您的大衆密鑰到您的服務器的~/.ssh/authorized_keys文件。如果它沒有,請用nano ~/.ssh/authorized_keys創建它並粘貼到那裏。
  3. 在你的電腦,你可以用下面的命令在服務器運行腳本:

    ssh [email protected]_ip 'bash -s' < local_script.sh 
    

    或者,如果你有一個單一的命令,然後運行這個會做:

    ssh [email protected]_ip "echo Test | tee output.log" 
    
  4. 如果您不喜歡SSH一直要求您輸入密碼,請使用ssh-agent

對於特定於SQL的腳本,可以將所有SQL命令放入單個文件中,如query.sql。您應該複製query.sql到您的服務器(scp query.sql [email protected]_ip:~/),然後運行

ssh [email protected]_ip "mysql -uyourusername -pyourpassword < query.sql | tee output.log" 

輸出將被保存在output.log。也請檢查this answer

3

可能不是100%相關,但我必須在Linux上也這樣做。

首先,您希望在另一臺具有SSH訪問權限的服務器上創建新的用戶帳戶並生成SSH密鑰對,即使您要以root身份執行此操作,
密鑰對遠遠優於標準密碼,因爲它們更強大,
,它們允許您通過SSH自動登錄。

沒有真正的自動化密碼輸入過程的方法(至少在Linux上不行),因此需要使用SSH密鑰來實現這一點。

您基本上可以將一系列命令作爲參數發送到SSH工具。
像這樣,
ssh [email protected] "ls; cat *; yes;"
希望有所幫助。

0

有一個Linux命令ssh-copy-id會爲你做這個,它也可以作爲一個自制軟件的Mac公式。