ZT - 對話 UNIX: UNIX 高手的重大秘密(3)

saintsiro發表於2010-08-08
噓......關於 SSH 的秘密 Secure Shell (SSH) 是一個功能強大的子系統,用於安全地登入到遠端系統、複製檔案並穿越防火牆。由於 SSH 是一個子系統,它提供大量選項來定製和簡化其操作。事實上,SSH 提供名為 $HOME/.ssh 的整個 “點目錄” 來包含其所有資料。(您的 .ssh 目錄必須是模式 600,以阻止他人訪問。非 600 模式將干擾正常的操作。)特別是,檔案 $HOME/.ssh/config 可以定義大量快捷方式,包括機器名稱的別名、每主機訪問控制等。 下面是位於 $HOME/.ssh/config 中的一個典型程式碼塊,用於定製一個特定主機的 SSH: Host worker HostName worker.example.com IdentityFile ~/.ssh/id_rsa_worker User joeuser ~/.ssh/config 中的每個塊配置一個或多個主機。不同的塊使用一個空行分隔。這個塊使用 4 個選項:Host、HostName、IdentityFile 和 User。Host 為 HostName 指定的機器建立一個暱稱。暱稱允許您鍵入 ssh worker,而不是 ssh worker.example.com。另外,IdentityFile 和 User 選項指定如何登入到 worker。前者指向此主機使用的一個私匙,後者提供登入 ID。這樣,這個程式碼塊就等同於以下命令: ssh joeuser@worker.example.com -i ~/.ssh/id_rsa_worker ControlMaster 是一個鮮為人知的強大選項。如果設定,同一個主機的多個 SSH 會話將共享單個連線。一旦第一個連線建立,後續連線就不再需要憑證,從而消除了每次連線同一機器都需要鍵入密碼的麻煩。ControlMaster 非常方便,您可能願意為每臺機器啟用它。啟用方法非常簡單,只需使用主機萬用字元 *: Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p 如您所料,標記了 Host * 的塊將應用到每個主機,甚至是那些在配置檔案中沒有明確指定的主機。ControlMaster auto 嘗試使用一個現有連線,並在沒有發現共享連線時建立一個新連線。ControlPath 指向一個檔案,以便持久化一個控制套接字以供共享。%r 用遠端登入使用者名稱替換,%h 用目標主機名替換,%p 代替連線使用的埠。(您還可以使用 %l,它使用本地主機名替換。)上述規範使用類似於下面的檔名建立控制套接字: master-joeuser@worker.example.com:22 當到遠端主機的所有連線都被切斷時,每個控制套接字都就會被移除。如果您想隨時瞭解連線到了哪些主機,只需鍵入 ls ~/.ssh 並檢視控制套接字的主機名部分(%h)。 SSH 配置檔案非常大,它也有自己的手冊頁。鍵入 man ssh_config 檢視所有可能的選項。這裡有一個巧妙的 SSH 技巧:可以透過 SSH 從本地系統進入遠端系統。要用到的命令列如下所示: $ ssh example.com -L 5000:localhost:3306 這條命令的意思是:透過 example.com 進行連線,並在本地機器上的埠 5000 和名為 “localhost” 的機器上的埠 3306(MySQL 伺服器埠)之間建立一條通道。由於 localhost 在 example.com 上解釋(因為通道已建立),因此 localhost 就是 example.com。由於出站通道 — 以前稱為本地轉發(local forward)— 已建立,本地客戶端能夠連線到埠 5000,並與 example.com 上執行的 MySQL 伺服器通訊。 通道建立的常規形式如下: $ ssh proxyhost localport:targethost:targetport 其中,proxyhost 是可以透過 SSH 訪問的機器,並且擁有一個到 targethost 的網路連線(不透過 SSH)。localport 是您的本地系統上的一個非特權埠(1024 以上的任一未用埠),targetport 是您要連線到的服務的埠。 前面的命令從您的機器傳送出去,到達外部世界。 也可以使用 SSH 傳送進來,或者從外部世界連線到您的本地系統。入站通道的常規形式如下: $ ssh user@proxyhost -R proxyport:targethosttargetport 建立一條入站通道 — 以前稱為遠端轉發 — 時,proxyhost 和 targethost 的角色將被反轉:目標是您的本地機器,代理是遠端機器。user 是您在代理上的登入名。以下命令提供了一個具體示例: $ ssh joe@example.com -R 8080:localhost:80 這條命令的意思是:使用者 Joe 連線到 example.com,並將遠端埠連線到本地埠 80。這條命令向 example.com 上的使用者提供一個通道,以連線到 Joe 的機器上。遠端使用者能夠連線到 8080,以便連線 Joe 機器上的 Web 伺服器。 除了分別用於本地和遠端轉發的 -L 和 -R 之外,SSH 還提供 -D 引數來在遠端機器上建立一個 HTTP 代理。請參見 SSH 手冊頁瞭解正確語法。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16896827/viewspace-1036454/,如需轉載,請註明出處,否則將追究法律責任。

相關文章