LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1442|回复: 7

linux下实现ssh远程登录时自动设置参数DISPLAY

[复制链接]
发表于 2007-4-10 17:42:11 | 显示全部楼层 |阅读模式
默认开启的ssh从远程登录是不能直接运行图形窗口软件的,必须先设置远程屏幕DISPLAY,用Xmanage启动passive方式。下面就是远程登录时自动设置DISPLAY为远程客户端IP的
#cd
#vi .bash_profile
#export DISPLAY=`echo $SSH_CLIENT |awk -F '[: ]' '{print $4}'|cut -f1-4 -d'.'`:0.0
发表于 2007-4-11 03:21:15 | 显示全部楼层
ssh -X
就可以了
另外就是你那行export根本不能用! 在fc和solaris下都不对!自己echo $SSH_CLIENT看看吧,用awk可以理解,cut则完全没有必要!
回复 支持 反对

使用道具 举报

发表于 2007-4-11 11:14:41 | 显示全部楼层
ssh -X
或者
ssh -Y

X有访问控制,而且也不一定都开TCP端口,你这个方法并不好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-11 11:44:41 | 显示全部楼层
>另外就是你那行export根本不能用! 在fc和solaris下都不对!自己echo $SSH_CLIENT看看吧,用awk可以理解,cut则完全没有必要!
我的系统是redflatworkstion5.0、rhel5和fc6都成功了
export:你用的不是bash
$SSH_CLIENT:我怀疑你没开始sshd
awk:你认为它不好用?
cut:请你给出更好的方法

这个参数的设置是针对办公室的其它同事便利开的,一是不想开xdm/gdm,二是同事的机器都是winxp,用的是putty;三是redflatworkstion5.0没给我其它的远程登录方式;在这种情况下你认为这样不好吗
回复 支持 反对

使用道具 举报

发表于 2007-4-11 14:13:18 | 显示全部楼层
不好,因为开X的TCP访问不安全。
ssh本身能够提供X forwarding,干嘛不用。
回复 支持 反对

使用道具 举报

发表于 2007-4-12 00:15:04 | 显示全部楼层
Post by kingbo

export:你用的不是bash
我说的是你那一整行export不对,不是说export不对,从99年开始用linux以来我就没怎么用过bash以外的shell.
Post by kingbo

$SSH_CLIENT:我怀疑你没开始sshd
没开sshd,我怎么远程登录上去的?

[user@keg user]$ echo $SSH_CLIENT
XXX.XXX.XXX.XXX 49826 22
上面是一台远程的Solaris的机器的输出, XXX.XXX.XXX.XXX就是ssh client的IP
[user@fspc068 ~]$ echo $SSH_CLIENT
XXX.XXX.XXX.XXX 42809 22
上面是一台远程的fc5的输出。
按照你的方法:
echo $SSH_CLIENT |awk -F '[: ]' '{print $4}'
能得到什么有用的东西? 总共只有3个fields,哪里来的$4,而且域之间的分割符就是空格,和冒号没啥关系,有必要用-F'[: ]'么? 老弟确切知道-F '[: ]'是干什么用的吗? 可以改变这些环境变量的值的格式,比如用冒号作分割符,多输出几个域什么的,不过目前偶还没看见有人这么干,你是这么设定的么?
Post by kingbo

awk:你认为它不好用?
我可没说它不好用,相反,我一直用的挺欢。 不过做这么简单的事情还是就不劳他老人家了,如果你用bash,
假设SSH_CLIENT值为: 123.123.123.123 4567 22这种样子
试试看这个是不是你想要的:
export DISPLAY=${SSH_CLIENT%% *}:0.0
当然用了awk也没啥问题,所以偶说可以理解。
Post by kingbo

cut:请你给出更好的方法
更好的办法就是根本就不用cut,如上所述,在我所知的大多数情况下:SSH_CLIENT的格式应该像这样:
123.123.123.123 4567 22
那么echo $SSH_CLIENT | awk '{print $1}'完之后的结果就是
123.123.123.123
你直接用
export DISPLAY=`echo $SSH_CLIENT | awk '{print $1}'`:0.0
不就是你需要的结果
123.123.123.123:0.0
了么? 在这用cut是多此一举。 我不知道你那里的环境如何,即便这句得不到你想要的结果,在一个awk(或者只用cut不用awk)里面处理一下就可以,我相信没必要再多起一个cut进程。你认为一定有必要只能说是你awk(或者shell script)不熟。

总之,这些都不如直接ssh -X或者-Y来得直接方便安全, man ssh看一下或者搜索一下什么是X forwarding不愿意么? 正如版主说的,干嘛不用?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-12 19:17:12 | 显示全部楼层
呵呵,我的系统是红旗,
echo $SSH_CLIENT
:::XXX.XXX.XXX.XXX xxx 22
和你的可不一样
回复 支持 反对

使用道具 举报

发表于 2007-4-12 23:07:32 | 显示全部楼层
是有点不一样,不过你就那么自信你的方法就``完全‘’合理? 你的这种格式下,用-F'[: ]'和$4是没有错,但cut仍然是多此一举,因为你已经用了-F'[: ]', 输出$4,自然就把ip得到了,后面的端口根本就不需要理会。
  1. $ A=":::123.123.123.123 4567 22"
  2. $ export B=`echo $A | awk -F'[: ]' '{print $4}'`:0.0
  3. $ echo $B
  4. 123.123.123.123:0.0
  5. $ export B=`echo $A | awk -F'[: ]' '{print $4}' | cut -f1-4 -d '.'`:0.0
  6. $ echo $B
  7. 123.123.123.123:0.0
复制代码
你看,结果并无二致,难道在红旗下连这个都和其它系统不一样? 那就真的奇了大怪。

或者是只用cut不用awk
  1. $ export B=`echo ${A##*:} | cut -f1 -d ' '`:0.0
  2. $ echo $B
  3. 123.123.123.123:0.0
复制代码
或者
  1. $ export B=`echo ${A##*:} | awk '{print $1}'`:0.0
  2. $ echo $B
  3. 123.123.123.123:0.0
复制代码
上面这两个方法的一个好处是不管SSH_CLIENT是红旗格式还是红帽格式;) 都可以用,不用修改代码,当然碰到其它情况的就不灵了,写shell要通用总是件麻烦事。

P.S 总之,在你的例子中,awk和cut完全没有必要同时使用,个人觉得多起一个进程不是什么好事情,要避免,目前偶是想不出什么优雅的方法,但是我相信这个小小的讨论移到shell区去,那里的大哥哥姐姐们立马就给你一个很很漂亮的解决方案,很久没去那边请教问题了,不知道那些高手是不是在那里还很活跃。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表