2009-09-01 47 views
8

我在遠程Web服務器上編輯文件的當前解決方案是使用Fetch瀏覽遠程機器和TextWrangler進行編輯。但是由於我在遠程機器上越來越舒服地瀏覽命令行(但對於使用VIM來說不夠舒服......),我希望能夠在遠程機器上輸入類似'open filename.txt'的內容並在我的本地機器上打開TextWrangler。我聽說「逆向隧道」這個術語作爲一種選擇被拋棄了,但我不知道下一步該怎麼做。任何建議都非常感謝 - 謝謝!用TextWrangler打開遠程文件

+0

人產生廣大的命令,文本Wranger是它的編輯通過ssh文件的能力如此方便,它不是通過命令行:( – 2017-04-11 01:06:44

回答

1

我想你所指的是通過ssh被稱爲「X11轉發」。看一下ssh_config(5)的man頁面進行配置(或者使用'ssh'和'-X'參數)。據我所知,這隻適用於X11程序(gvim,xemacs等),因爲編輯器實際上是在連接到的主機上運行 - 只有顯示內容發生在本地機器上。所以TextWrangler不是一個選項,因爲它不是一個X11程序。

我使用Interarchy(從nolobe)進行遠程編輯。這是一個相當先進的ftp/sftp客戶端,可以爲您提供遠程文件的查找器式視圖,並允許您使用自己喜歡的編輯器處理這些文件。

如果你不喜歡爲這樣的程序付費,那麼你也可以使用密歇根大學提供的一個名爲「Fugu」的開源程序。

4

就我個人而言,我使用Cyber​​duck作爲我的S/FTP瀏覽器。在Cyber​​duck的偏好設置中,您可以定義一個默認的文本編輯器來編輯遠程文件。現在我可以在選中一個文件時點擊Cmd + K,它將在TextWrangler中打開。無論何時保存,更改都會自動傳輸到遠程文件。

3

我其實是想做同樣的事情,沒有人寫過它,所以我今天就明白了這一點。

有2個要求和3個可選配件,以這樣的:

  1. 啓用
  2. 設置遠程機器的SSH隧道到你的機器(需要)
  3. 兩臺計算機(必需)ssh登錄設置ssh隧道的別名(可選)
  4. 爲遠程機器上的TextWrangler設置一個別名(可選)
  5. 設置ssh密鑰,以便您不必每次都輸入密碼(可選)

您需要能夠從本地ssh到遠程運行命令,並且您需要能夠從遠程ssh到本地,以便它可以將命令發送到TextWrangler。

要建立SSH隧道,你需要在本地計算機上運行一個命令,如:

ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname] 

-f和-n標誌把ssh進入的背景,讓你你的機器上。 -R標誌將遠程計算機上的端口綁定到本地計算機上的端口。任何與端口10022上的遠程計算機聯繫的任何內容都將發送到本地計算機上的端口22。遠程端口可以是任何你想要的,但你應該選擇一個> 1024的端口來避免衝突,所以你不必是root。我選擇了10022,因爲它與ssh的默認端口22相似。用您的用戶名和機器名替換括號。

您需要在登錄後運行一次。爲了讓你的命令更容易,你可以在你的bash配置文件中添加一個別名。以下內容添加到您的本地~/.bash_profile

alias open-tunnel='ssh -f -N -R 10022:localhost:22 [username on remote machine]@[remote machine hostname]' 

當然,你可以選擇任何你喜歡的別名。

一旦你建立通道,你可以在遠程計算機上使用這樣的命令:

ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]//absolute/path/to/file.txt" 

-p標誌說,使用端口10022(或任何端口先前選擇)。這將導致遠程機器連接到本地機器,並在雙引號中執行命令而不打開交互式ssh會話。引號中的命令是您將在本地計算機上運行以在TextWrangler中打開遠程文件的命令。

爲了讓自己的命令更輕鬆,您可以在bash配置文件中添加一個函數。以下內容添加到您的遠程~/.bash_profile

function edit { if [[ ${1:0:1} = "/" ]]; then abs_path="$1"; else abs_path="`pwd`/$1"; fi; ssh -p 10022 [username on local machine]@localhost "edit sftp://[username on remote machine]@[remote machine hostname]/$abs_path"; } 

這是假設你沒有安裝在遠程機器上的TextWrangler命令行工具。如果你這樣做,你應該爲edit以外的其他功能命名。例如,tw。這裏,${1:0:1}查看函數第一個參數的第一個字符,它應該是文件路徑。如果它不以/開頭,我們通過將當前工作目錄(pwd)添加到開頭來計算絕對路徑。現在,如果你在遠程機器上的/home/jdoe/some/directory/和運行edit some/other/directory/file.txt,下面將要在本地計算機上執行:

edit sftp://[username on remote machine]@[remote machine hostname]//home/jdoe/some/directory/some/other/directory/file.txt 

最後,你應該建立SSH密鑰在兩個方向使你不每次提示輸入密碼。這裏有一個指導別人寫道:http://pkeck.myweb.uga.edu/ssh/

+0

,看起來暴露就像一個很好的解決方案,但是隧道是什麼?你不能讓第二個SSH連接(運行編輯命令的那個)直接連接到你的計算機,而不是通過這條隧道嗎? – Vortexfive 2014-02-28 13:50:17

+0

我喜歡這裏的方法,即使它恐嚇。 – 2017-04-11 02:39:52

0

的FileZilla文件的編輯提供了此功能好。 You can download it here。連接到您的sftp後,您可以右鍵單擊文本文件並使用您選擇的文本編輯器打開它。

0

最小的答案

您可以使用AppleScript的。因此,在命令行中執行此:

osascript <<EOF 
     tell application "TextWrangler" 
     activate 
     open location {"sftp://myusername:@my.server:22222//home/username/.bashrc"} 
end tell 
EOF 

注意

  1. 顯然,你不會想每次調用鍵入一個文件在這裏,所以我的建議是把這個邏輯裏面常規shell腳本: osascript <<EOF tell application "TextWrangler" activate open location {"$1"} end tell EOF

然後調用腳本是這樣的:

sh ~/bin/textwrangler.sh "sftp://myusername:@my.server:22222//home/username/.bashrc" 
  • 指定主機限定的路徑能得到乏味每次所以無論是硬編碼在腳本中,或通過您的殼結合腳本調用對擊鍵。對於bash: bind '"\et":"sh ~/bin/textwrangler.sh \"sftp://myusername:@my.server:22222/\""' 現在你按Alt-t