2017-04-24 140 views
1

這是一個後續行動:後續行動:使用JSch到SFTP時,還必須切換用戶

Using JSch to SFTP when one must also switch user

這個問題一直在腦後,因爲我問了原來的問題,而我們的服務器管理團隊審查他們的政策,但我現在正在重新選擇它!

我想要做的就是使用JSch連接到遠程服務器,然後使用sftp或scp來訪問一些文件 - 按照原始問題中的代碼示例。問題是這些文件是由另一個用戶擁有的,因此我需要su給該用戶,然後在發出sftp或scp命令之前提供密碼。

這不能在JSch中完成,這是正確的,因爲它能夠通過exec通道發送密碼存在安全風險。所以這些都是我看到它們時所提出的選擇。

  1. 重寫JSch功能。 Martin非常有幫助地提供了一些關於如何通過以及如何在「通過後門」傳遞密碼的原始問題的答案中提供指導。但是我對自己無法重寫JSch代碼沒有把握,再次,即使成功,我也會繞過一個出於合法原因出現的安全功能,所以我不願意嘗試這樣做。

  2. 在服務器上,授予我的用戶對其他用戶的無密碼訪問權限。這是一個沒有,因爲我的服務器管理團隊不會同意這一點。

  3. 有一個服務器端.sh腳本,可以由我的用戶運行以訪問這些文件。再次,這是一個不,因爲我的服務器管理團隊不會同意!

  4. 使膩子會話自動化,即以phsically打開膩子並將命令從Java客戶端逐行傳遞給膩子會話。

  5. 放棄!我是否應該接受我正在嘗試在這裏做一些不應該自動化的事情,而只是簡單地進行手動測試呢?

我會非常感謝任何想法/指導。

回答

1

我想在這裏做一些不應該自動化的東西。

原則上這是正確的。

唯一正確的自動解決方案是直接與有權訪問文件的用戶進行登錄。其他一切只是一個黑客或解決您的安全政策。理想情況下,您應該使用專用私鑰進行身份驗證,以便監控應用程序的訪問權限並能夠控制訪問權限(例如臨時關閉該權限,而不會影響同一帳戶的其他用途)。

雖然我可以想象你的系統管理員不會允許你直接登錄,因爲他們無法預見它帶來的安全問題(如果有的話)。

+0

非常感謝你總是花時間解決這些問題馬丁。您已經確認了我的想法 - 而且您是對的,我的管理員不會允許我以其他用戶的身份直接訪問。我會讓我的團隊知道我們在stackoverflow上的交流,希望我們都會同意這個特定的測試需要至少有一些手動步驟。 –

1

我只是想分享一下,我已經有了解決這個問題的解決方案,通過調整示例JSch示例JumpHosts。

http://www.jcraft.com/jsch/examples/JumpHosts.java

重寫在靜態類MyUserInfo允許我自動接受提示框,輸入框等而不物理不必使用鍵盤的繼承的方法,所以具有一個完全自動化的測試如所期望。

jcraft團隊提供這樣有用的工作例子非常棒。感謝所有花時間閱讀並考慮我的問題的人。

編輯:根據Martin的評論,我應該指出,只有在SSH配置中有特殊規則允許直接從localhost登錄user2(但不允許直接遠程登錄)的情況下,這纔有效。這不是sudo。所以這一般不起作用。

+0

端口轉發示例如何與sudo相關? –

+0

如果使用兩個參數調用端口轉發示例:user1 @ hostname和user2 @ localhost其中user1是我的個人用戶,user2是有權訪問我想要的文件的用戶(該用戶1無法直接訪問)它適合一種享受! –

+0

但是,只有在SSH配置中有一個特殊的規則允許直接從'localhost'登錄'user2'(但不允許直接遠程登錄)的情況下,它才能工作。這不是sudo。所以這一般不起作用。值得一提的答案。 –