GNU/Linux >> Linux の 問題 >  >> Linux

Ssh – Ssh経由で接続した直後にスクリプトを実行する方法は?

私はこの質問をし始めましたが、開いている間に答えました。この質問を投稿し、自分の解決策をフォローアップして、他の潜在的な解決策に公開したままにします。

< backstory >

私はtmuxとvimのユーザーです。フラッシュムービーでカーネルパニックが発生したときにUbuntu開発マシンが機能しなくなることを心配する必要がないので、リモートvim作業が好きです。 tmuxを実行すると、再起動後に開いているファイルが待機し、中断したところから続行できます。このように接続すると、tmuxセッションでvimが実行されて問題が発生しました:

ssh example.com -t 'tmux attach'

UTF-8の問題は、通常のシェルインでtmuxセッションに手動で接続した場合には発生しません。

< / backstory >

そのため、sshログインで何かを開始する再利用可能な方法が必要です。これは、 .zshrcで構成した他のどの方法にも影響しません。 (または .bashrc 私の開発環境で必要になる可能性のあるbashをまだ使用している場合は、そのマシンでローカルで作業していると表示されません。

承認された回答:

ssh example.comを実行する場合 、sshデーモンがログインシェルを起動し、ログインシェルが〜/ .profileを読み取ります。 (または〜/ .bash_profile または〜/ .zprofile または〜/ .login ログインシェルによって異なります)。リモートで実行するコマンドを指定する場合( -t の有無にかかわらず) )、sshデーモンは通常のシェルを開始するため、 .profile 読み取られません。対処法:

ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'

ほとんどのsshデーモンは、 LC _ * を除いて、環境変数の送信を拒否するように構成されています。 。 example.comのsshデーモンの場合 許可すると、カスタムの LC _ *を悪用できます tmuxを自動的に開始する変数—これを〜/ .profileに入れます :

if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
  exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
  exec tmux attach
fi

次に、 LC_tmux_session =ssh example.comでログインします。 またはLC_tmux_session=session_name ssh example.com

この回答には、sshを介した環境変数の受け渡しに関する詳細情報があります。


Linux
  1. ssh 経由で永続的なプロセスを実行する

  2. 起動時にシェルスクリプトを実行する方法

  3. SSHログインでコマンドを自動的に実行する方法は?

  1. ターミナルで vagrant の SSH を終了する方法

  2. 絶対パス経由でbashスクリプトを実行するには?

  3. SSH 経由でログインしているかどうかを確認するにはどうすればよいですか?

  1. 「find-exec{};?」を実行する方法

  2. Openvpnが正常に接続した後にスクリプトを実行する方法は?

  3. スクリプトを実行する方法??