2016-11-07 175 views
0

我是linux和shell脚本的新手。我想连接到本地主机并进行交互。使用shell和传递命令打开telnet

#! /bin/bash 
(exec /opt/scripts/run_server.sh) 

当我执行这个bash脚本时,它开始监听端口。

Listening on port xxxxx 

现在我想发出此命令“远程登录本地主机XXXXX” 我想是这样的:

#! /bin/bash 
(exec /opt/opencog/scripts/run_server.sh)&& 
telnet localhost xxxxx 

它仍然是在端口上侦听。但我认为第二个命令没有运行。我希望另一个窗口显示它正在像这样连接。

[email protected]:~$ telnet localhost xxxx 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
server> 

为什么我执行这些作为一个脚本,在服务器自动,我需要通过发出这样的“供应链管理”,“某些命令进行一些处理解析”等原因.....

[email protected]:~$ telnet localhost xxxx 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
server>scm 
Entering scheme shell; use ^D or a single . on a line by itself to exit. 
guile> (parse "i eat apple") 

我有很多文字来。手动我不能发出这个解析命令为每个句子。所以我想自动化。所以我需要编写一个连接到服务器和交互的脚本。

任何指导方针。最后如何交互/发送命令到这个guile shell?

+3

什么是“但这并不成功”。其实是指?怎么了? _确切地说... _ – arkascha

+0

你有没有必要在子shell中运行第一个脚本的原因? – Inian

+1

并且在shell脚本中使用'(exec)'通常不是必需的。你是因为特殊情况,还是因为习惯了'python'或其他语言的cmd?但是,即使你删除这个例子也不会有太大的作用。从cmd行获取工作。也许你需要在'/ path/to/server -opts x y z file&'后台运行你的服务器。然后查看它是否在端口上响应telnet连接。祝你好运。 – shellter

回答

2

一种以相同或不同用户的身份登录到Linux服务器并运行某些命令或.sh脚本(对提交后挂接或cron作业非常有用)的方法是使用名为sshpass的程序,例如cron作业命令或SVN post-commit钩子应该是这样的:

/usr/bin/sshpass -p 'password' /usr/bin/ssh 
-o StrictHostKeyChecking=no -q [email protected] 'any command' 

与密码只需更换密码,并与您的用户的用户,并把你需要为特定的用户身份运行命令

要在Ubuntu上安装sshpass,只需键入

apt-get install sshpass 

或者在CentOS

yum install sshpass 
0

我解决了这个与netcat的(NC)命令。

$ echo "command1\ncommand2\n" | nc localhost xxxxx 

我可以使用telnet localhost xxxx手动连接到localhost,然后我可以像这样将命令从shell传递到localhost。

+1

这可能不起作用,具体取决于服务器,因为TELNET协议不是TCP上的简单纯文本(客户端和服务器在连接设置期间交换一些信息)。我不知道任何'nc'标志自动支持。因此'telnet'比'nc'好,但是由于它不能很好地处理像'nc'这样的标准输入,'expect'是一个运行'telnet'的好工具,能够正确处理输入/输出。 –