没有密码的Unix SSH

时间:2013-09-23 20:11:03

标签: mysql shell unix ssh passwords

嘿,我完全不熟悉Unix,我需要编写一个“shell脚本”(?)来连接到另一个终端并运行一些SQL查询。我怎么做到这一点?我一直在浏览这个和其他董事会的一些答案,如果我找到了答案,我就不明白了。

我能够手动连接,输入密码等,但我需要自动化该过程。我没有访问Perl(正如一些答案所示),我无法编辑etc / shadow文件。所以我认为这必须通过Unix本身来完成。这就是我目前使用的:

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

vHOST='HOST-NAME'

vPORT=4443

ssh root@vHost
expect {
    "root@the-host 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

请完整解释所有答案。我正在努力学习。

3 个答案:

答案 0 :(得分:3)

可能不是100%相关,但我必须在Linux上做同样的事情
首先,您希望在具有SSH访问权限的其他服务器上创建一个新用户帐户并生成SSH密钥对,即使您要以root身份执行此操作,因此密钥对远远优于标准密钥对密码因为它们更强,所以它们允许您通过SSH自动登录。

没有真正实现密码输入过程自动化的方法(至少在Linux上没有),因此SSH密钥需要这样做。

您基本上可以将一串命令作为参数发送到SSH工具 像这样,
ssh user@host "ls; cat *; yes;"
希望有所帮助。

答案 1 :(得分:1)

试试这个:

  1. 将您的SSH 公开键复制到剪贴板(cat ~/.ssh/id_rsa.pub的输出)。如果您没有SSH密钥对,请使用this tutorial生成它。
  2. 公开键粘贴到服务器的~/.ssh/authorized_keys文件中。如果没有,请使用nano ~/.ssh/authorized_keys创建并粘贴到那里。
  3. 在您的计算机中,您可以使用以下命令在服务器中运行该脚本:

    ssh user@server_ip 'bash -s' < local_script.sh
    

    或者如果您只有一个命令可以运行,那么这样做:

    ssh user@server_ip "echo Test | tee output.log"
    
  4. 如果您不喜欢SSH一直要求您输入密码,请使用ssh-agent

  5. 对于特定于SQL的脚本,您可以将所有SQL命令放在一个文件中,例如query.sql。您应该将query.sql复制到您的服务器(scp query.sql user@server_ip:~/),然后运行

    ssh user@server_ip "mysql -uyourusername -pyourpassword < query.sql | tee output.log"
    

    输出将保存在output.log中。也请检查this answer

答案 2 :(得分:0)

有一个Linux命令ssh-copy-id将为您执行此操作,它也可作为自制公式用于Mac。