Ssh
如何通過跳轉伺服器 SSH 到 Rails 控制台?
我想有一個單線這個。當我使用以下命令時:
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
參數和命令應涵蓋您的其餘要求。