linux 远程shell(shell远程执行服务器脚本)

今天给各位分享linux 远程shell的知识,其中也会对shell远程执行服务器脚本进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

如何使用XManager下的Xshell远程连接Linux

1.打开xshell终端,点击"新建"。

2.输入回话名称、和远程主机的IP地址。

3.点击“用户身份验证”输入用户名和密码。

4.“接受并保存”用户的密码,下次登录不用直接输入密码了。

5.这个界面表示登录成功。

6.下次登录,点击文件夹图标,在连接你所需要的主机,直接连接就可以了。

请下载这个版本使用,装这个程序才是带全功能的

Xmanager&XShell

Xshell

希望能够帮到你,linux开源系统希望能带给你不一样的体验

Linux中rsh远程shell命令的使用技巧解析

rsh有两种使用模式:

rsh$host:远程登录,启动交互式进程。

rsh$host$command:远程执行命令,并显示输出。

rsh hosthostcommand

rsh$host$command的作用是:

1.在远程机器上执行命令$command

2.通过网络连接(socket)重定向当前进程和远端进程的标准输入和标准输出

3.远端rsh进程在远端进程结束后结束

4.本地rsh进程读取远端进程的标准输出直到结束(EOF)

深刻理解这个执行过程有助于理解各种“奇怪”的现象和用法。

代码如下:

+ Suspended(tty input)

$ rsh localhost infinite-loop

[1]+ Suspended(tty input) rsh pv007 infinite-loop

$ rsh-n localhost infinite-loop

#执行正常

后台执行rsh命令时,提示了和标准输入相关的错误信息。这是因为rsh默认会把当前窗口的标准输入重定向到远端进程。

而本地rsh进程作为后台程序运行的话,标准输入被“阻塞”了。

通过-n选项制定不需要重定向标准输入(stdin)。

远端进程的执行

执行命令

代码如下:

rsh somehost infinite-loop

在远端机器上查看相关进程:

代码如下:

$ pstree-a-p 3353

in.rshd,3353

└─csh,3363-c infinite-loop

└─infinite-loop,3632/u/szhang/bin/infinite-loop

可以看出,远端机器上的rshd进程负责启动远端进程。而且可以看出是通过csh-c的方式启动的(这里用户的默认Shell是C Shell)。

远端进程的标准IO

检查远端进程的文件描述符:

代码如下:

$ ls-l/proc/3363/fd/proc/3632/fd

/proc/3363/fd:

total 0

lrwx------. 1 Jul 30 23:47 16- socket:[1184748899]

lrwx------. 1 Jul 30 23:47 17- socket:[1184748899]

l-wx------. 1 Jul 30 23:47 18- pipe:[1184749092]

lrwx------. 1 Jul 30 23:47 19- socket:[1184748899]

代码如下:

/proc/3632/fd:

total 0

lrwx------. 1 Jul 30 23:47 0- socket:[1184748899]

lrwx------. 1 Jul 30 23:47 1- socket:[1184748899]

l-wx------. 1 Jul 30 23:47 2- pipe:[1184749092]

可以看出远端里程的标准输入输出是被重定向到socket上的:

1.stdin和 stdout共享一个socket连接

2.stderr则通过一个pipe重定向(重定向到stdout???)

3.rsh的返回值

rsh程序自身的返回值表明的是rsh自身的运行状况,而不是远端进程的返回值。

获得远端进程的返回值

代码如下:

#远端是C Shell

$ rsh$host"$command; echo$status"

代码如下:

#远端是Bash Shell

$ rsh$host"$command; echo$?"

代码如下:

#远端Shell类型不确定

$ rsh$host"sh-c'$command; echo$?'"

启动远端进程所用的Shell

由于用于启动远端进程的Shell类型是未知的,而有些操作的语法在不同Shell里是不同的。

比如输入输出重定向、命令返回值等。

解决该问题的方法之一是通过明确指定的Shell来启动真正需要的里程。比如:

代码如下:

#不确定远端Shell的类型,显式通过Bash Shell来启动需要的进程

$ rsh-n$host"sh-c'$command/dev/null 21'"

另一种思路,则是通过一个wrapper程序来启动真正的命令。

通过rsh在远端执行后台进程

想在远端机器上执行后台进程。命令rsh$host"$command"是不起作用的,会导致本地的rsh进程不能结束。

背后的原因应该是,$command的标准输入输出通常仍然绑定在rsh连接的socket上,从而导致本地的rsh进程无法读取到文件结束符EOF。

知道了原因就知道该怎么办了,关键是关闭后台进程续定在rsh连接上的标准输入输出。

代码如下:

#如果远端Shell是C Shell

$ rsh-n$host"$command/dev/null"

代码如下:

#如果远端Shell是Bash Shell

$ rsh-n$host"$command/dev/null 21"

代码如下:

#不确定远端Shell的类型

$ rsh-n$host"sh-c'$command/dev/null 21'"

但上面这样重定向的办法有个缺点是不能得到任何远端进程的输出,而有时我们希望获得一些输出信息。

这时就需要远端进程能够以守护进程(daemon)的方式运行。

这种情况下,rsh命令可以简单地写作:$ rsh-n$host"$command"

远端后台进程的内容用Tcl表示,大意如下:

代码如下:

#/bin/env tclsh

puts"I am a background job"

puts"This Can Be Seen by Remote rsh Process"

close stdout

close stderr

# rsh连接到此应该结束。

puts"This Can NOT Be Seen by Remote rsh Process"

更进就步,我们可以甚至忽略rsh命令中的后台运行符:$ rsh-n$host"$command"

这时远端进程需要通过fork的方式结束自己,并启动真正的后台进程(守护进程)。

rsh进程的阻塞和超时处理

在程序中调用rsh$host$command时可能由于各种奇怪的原因发生rsh进程的阻塞,这不是我们希望看到的。

我们希望设置一个超时(timeout)机制来解决这个问题。

在Tcl程序中的一种实现可以这样: TODO

TCP Connection连接数过多引起的rsh失败

监控邮件显示rsh$host$command命令失败,错误提示为“poll: protocol failure in circuit setup"

怀疑是网络连接数过多所引起。

rsh$host$command的网络连接过程

命令rsh$host连接远程主机的513端口。

命令rsh$host$command则连接远程主机的514端口,并随后发送一个本地端口号给远程主机,要求远程主机建立一个新的TCP连接到这个端口(还不清楚这个新的连接有什么作用)。然后才是传送命令和等待命令结束。

这样做的结果就是在rsh$host$command进程过多时,本地开放的端口资源被消耗完了,从而导致新的rsh$host$command失败。

这是rsh$host的使用则依然正常。

这里提到的rsh的缺陷,也是建议尽量使用ssh的原因之一。

没有完全关闭的网络连接:

在远程主机上kill掉相关的rsh进程后,会导致TCP连接没有完全关闭。

netstat命令显示CLOSE_WAIT状态,端口资源并没有释放出来。

根据配置文件/proc/sys/net/ipv4/tcp_keepalive_time显示,需要等待2个小时,那些端口才会因为超时而被真正关闭,从而释放出来。

代码如下:

% netstat-a| grep localhost

tcp 0 0 localhost:933 localhost:935 CLOSE_WAIT

% cat/proc/sys/net/ipv4/tcp_keepalive_time

7200;# in seconds.= 2 hours

% echo"net.ipv4.tcp_keepalive_time= 120"/etc/sysctl.con

Xshell如何远程桌面连接Linux系统

Xshell是款非常不错的软件,下文这篇教程就为你们带来了Xshell远程桌面连接Linux系统方法步骤,希望大家喜欢。

Xshell远程桌面连接Linux系统方法步骤

1、首先双击桌面的快捷图标打开该应用程序,在软件的主界面上,左上角有个“文件”菜单,单击并选择“打开”命令;

2、在弹出的会话窗口,点击左上角的“新建”;

3、在弹出的新建会话属性中,填写名称和主机,名称可以随意写,主机可以为IP地址,其他默认,点击确定;

4、如图选择新建后的会话,点击连接按钮;

5、首次连接会出现该图提示,点击“接受并保存”即可;

6、在弹出的页面中,填写用户名,并点击确定;

7、在弹出的SSH用户身份验证窗口中填写密码,并点击确定;

8、这样就成功的连接Linux系统了,如下图所示,可以在光标处尽情的输入命令了。

Xshell|

阅读剩余
THE END