2013-05-02 80 views
0

我想让保存在我的bashrc文件中的别名通过SSH登录到远程MySQL数据库。 假设我无法添加/更改正在接入的远程计算机上的任何文件。这是相关的代码。为SSH创建别名使用ENDSSH登录MySQL登录heredoc

function ssh_mysql { 
    echo "SSHing to $server" 
    ssh -t -t [email protected]$server <<ENDSSH 
    eval "mysql -h "$host" -u $user -p $pass $db" 
ENDSSH 
} 
alias wt_mysql=ssh_mysql 

的问题:进入“wt_mysql”到终端作为别名SSHS并登录到MySQL的罚款..但想在MySQL提示符输入任何命令/查询/等时,没有我所提交已执行/运行。包括'exit'命令。我必须按C键才能返回到我的本地终端。虽然它有点出于我的理解我相信问题与此主题有关,Terminating SSH session executed by bash script
我如何确保mysql和任何后续命令远程执行?
谢谢!

+2

为什么你定义'函数ssh_mysql'然后'别名wt_mysql = ssh_mysql'而不是只定义'函数wt_mysql'的?我假设在我的答案中,运行'ssh_mysql'和运行'wt_mysql'时遇到同样的问题,但如果是这种情况,那么为什么要告诉我们这个别名?一般来说,您应该尽可能简化您的问题,以方便人们帮助您。 – dave4420 2013-05-02 08:53:22

+0

感谢您的解决方案。我一直在思考的东西..我一直希望这是一个别名,以便它出现在带有别名命令的标准输出中。我的问题是,我有这个时髦的密码来解决这个问题字符。将我的特定解决方案添加到下面的解决方案的评论中。 – sojojo 2013-05-09 20:14:32

回答

3

我不明白你为什么使用eval(或者你为什么通过-t开关两次)。

我希望这个ssh命令,做你想做的:

ssh -t [email protected]$server "mysql -h '$host' -u $user -p $pass $db" 
+1

我认为'-t'至少需要一次(通过'ssh'运行一个交互式程序);两次应该是无害的。 – chepner 2013-05-02 12:17:40

+0

@chepner是的,需要'-t'来分配一个终端...我对第二个'-t'应该完成什么感到困惑。 – dave4420 2013-05-02 21:59:48

+0

再次感谢@ dave4420以下是我在创建ssh + mysql别名时的特殊情况:'ssh_mysql(){ssh_mysql(){ssh -t $ suser @ $ server“mysql -h”$ host“-u”$ user“ - -password ='“$ pass”'“$ db”“ } alias wt_mysql = ssh_mysql' – sojojo 2013-05-09 20:25:26