2012-01-18 49 views
2

我在使用sudo時遇到了SSH X-11轉發問題。我找到了一個解決方案。編寫用於X-11轉發的bash腳本

$hostname 
server4.a.b.edu 

首先,我做的事:

$ echo $DISPLAY 
localhost:10.0 

然後

$ xauth list 
server1.a.b.edu/unix:12 MIT-MAGIC-COOKIE-1 6026864294a0e081ac452e8740bcd0fe 
server4.a.b.edu/unix:10 MIT-MAGIC-COOKIE-1 f01fbfe0c0d68e30b45afe3829b27e58 

然後,我需要做的

$ sudo xauth add server4.a.b.edu/unix:10 MIT-MAGIC-COOKIE-1 f01fbfe0c0d68e30b45afe3829b27e58 

sudo的工作,爲餅乾與我的服務器名稱並顯示。

如何編寫一個bash腳本來自動執行此操作?

回答

1

你根本不需要腳本;它只是一個單一的命令。

sudo xauth add `xauth list $DISPLAY` 
+0

我收到一個錯誤:xauth:(argv):1:bad「add」命令行 – Bruce 2012-01-18 20:54:38

+0

does'xauth list $ DISPLAY'給你一行顯示嗎?我想知道你是否有與我不同的東西版本。 – 2012-01-18 21:51:05

+0

它不顯示任何東西... – Bruce 2012-01-18 21:54:08

1

我做

sudo su otheruser -c "xauth add $(xauth list :${DISPLAY##*:}); xterm" 

替換使用xterm要運行

2

一兩件事,在RHEL6工作是出口sudoing前XAUTHORITY變量的GUI命令,例如:

export XAUTHORITY=~/.Xauthority 
sudo xclock 
0

我在用ssh登錄後使用這個:

echo -n "xauth add `xauth list :${DISPLAY#*:}`" | sudo su - otheruser 
sudo su - otheruser 
echo -n "xauth remove :${DISPLAY#*:}" | sudo su - otheruser 

基本上它會去掉顯示的主機名部分。 xauth仍然可以像這樣使用它。

即使您對「su - otheruser」以外的任何其他命令沒有sudo權限,它也能正常工作。之後它還會刪除添加的cookie,以提高安全性和清潔度。 :)

您可以使用任何你喜歡的sudo命令變體替換中間的sudo su - otheruser命令。