Ssh

如何通過跳轉伺服器 SSH 到 Rails 控制台?

  • October 23, 2015

我想有一個單線這個。當我使用以下命令時:

ssh -o ProxyCommand='ssh -W %h:%p user@<jump server>' -t user@<rails server> 'sudo su another_user ; cd /some/dir ; RAILS_ENV=production bundle exec rails console'

我最終在 rails 伺服器上,但我不在 rails 控制台中:

$(rails server)

然後我嘗試退出,認為它不起作用:

$(rails server) exit
exit

但是,它鎖定並看起來像上面一樣。然後我按 CTRL-C 並得到一個 ruby​​ 異常。我沒有發布紅寶石異常,因為我認為它不相關,而且每次都不同。似乎它正在中斷 rails 控制台,但 rails 控制台從未出現在我面前。

您的問題問題似乎出在命令的這一部分

sudo su another_user ; cd /some/dir ; RAILS_ENV=production bundle exec rails console

這會依次呼叫三個命令。他們每個人都將等待前一個命令的完成。

第一個命令sudo su another_user將以 another_user 身份啟動一個 shell。離開該外殼後,將執行以下命令。

這些命令cd /some/dir ; RAILS_ENV=production bundle exec rails console將以您登錄的使用者身份執行。如果您希望這些命令以another_user身份執行,並且它們的行為與您的預期不同,那麼當它們以user身份執行時,這將解釋您的問題。

也許你的意思是寫

sudo su another_user -c "cd /some/dir ; RAILS_ENV=production bundle exec rails console"

或者

sudo su - another_user -c "cd /some/dir ; RAILS_ENV=production bundle exec rails console"

其中額外-導致環境變數被更新,登錄腳本在執行其餘命令之前以another_user身份執行。

我為該問題的先前修訂寫的答案

為了更好的安全性和易用性,我建議您ssh在客戶端主機上執行這兩個命令,而不是在跳轉伺服器上執行。ProxyCommand和論點的組合-W非常適合這種情況。

ssh -o ProxyCommand='ssh -W %h:%p jump-server' -t app-server 'cd /some/dir ; rails console'

-t參數和命令應涵蓋您的其餘要求。

引用自:https://serverfault.com/questions/730711