嘿,我完全不熟悉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
请完整解释所有答案。我正在努力学习。
答案 0 :(得分:3)
可能不是100%相关,但我必须在Linux上做同样的事情
首先,您希望在具有SSH访问权限的其他服务器上创建一个新用户帐户并生成SSH密钥对,即使您要以root身份执行此操作,因此密钥对远远优于标准密钥对密码因为它们更强,所以它们允许您通过SSH自动登录。
没有真正实现密码输入过程自动化的方法(至少在Linux上没有),因此SSH密钥需要这样做。
您基本上可以将一串命令作为参数发送到SSH工具
像这样,
ssh user@host "ls; cat *; yes;"
希望有所帮助。
答案 1 :(得分:1)
试试这个:
cat ~/.ssh/id_rsa.pub
的输出)。如果您没有SSH密钥对,请使用this tutorial生成它。~/.ssh/authorized_keys
文件中。如果没有,请使用nano ~/.ssh/authorized_keys
创建并粘贴到那里。在您的计算机中,您可以使用以下命令在服务器中运行该脚本:
ssh user@server_ip 'bash -s' < local_script.sh
或者如果您只有一个命令可以运行,那么这样做:
ssh user@server_ip "echo Test | tee output.log"
如果您不喜欢SSH一直要求您输入密码,请使用ssh-agent
对于特定于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。