2013-09-23 57 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公式。