ルートがSSH_TTYにアクセスする方法

ルートがSSH_TTYにアクセスする方法

考えるこれは、現在仮想端末をSSH_TTY保持しているデバイスノードによって設定された環境変数ですssh/dev/pts/0/dev/pts/1

SSHサーバーにログインすると、各セッションに割り当てられているデバイスノードを入力して表示できることがわかりますecho $SSH_TTY。私は見ることができますみんなwwho端末でデバイスノードを入力または使用します(少なくとも私のユーザー名の下)。$SSH_TTY(または)のスクリプト値を使用して、(たとえば)各セッションの列ディレクトリを決定できます。 IOW、ログインが読み取りに進むとき、値はすでに割り当てられています。~/.profile~/.bash-profileSSH_TTY~/.profile

また、MOTDを通じてユーザーに価値を伝えたいのですが、SSH_TTY現時点ではそうすることはできません。私考えるこれは、すべてのスクリプトがログイン時に実行され、root何もないためです。/etc/update-motd.drootSSH_TTY解決策

私が見つけた唯一のものはこれです。

#!/usr/bin/sh
su pi -c echo "Greetings, I see you rode in on $SSH_TTY"

しかし、これは静かに失敗した。

どうすればいいですか?

答え1

ファイルからセッション.c、SSHサーバー内にdo_setup_env設定された関数がセッションSSH_TTYの確立後に呼び出されることがわかるので、Ubuntuには方法がありません。アップデート-motd(5)フレームワークにアクセスして追加できます。/etc/motd

質問の意図の主な部分はおそらく「SSH_TTYユーザーに渡された値」であるため、ユーザー出力から適切な環境変数の値を出力するだけです。$HOME/.profile要求はサーバーから実行する必要があります。何らかの理由で値を保存する必要がある場合は、出力をファイルに書き込むことができます。たとえば、次のようになります。

# Contents of $HOME/.profile ...

printf "SSH_TTY=%s\n" "$SSH_TTY" | tee "$HOME"/.ssh_tty

¹ update-motd(5) マニュアルページ自体によると、

Ubuntuはupdate-motdフレームワークを導入します。

これは、正式にサポートされていないArchに加えて、このパッケージがある唯一の他のディストリビューションであるTrisquelとAmazon Linuxのパッケージリポジトリを確認することで確認できます。ユーザーリポジトリ(ソース:repology.org)。

関連情報