私考えるこれは、現在仮想端末をSSH_TTY
保持しているデバイスノードによって設定された環境変数ですssh
。/dev/pts/0
/dev/pts/1
SSHサーバーにログインすると、各セッションに割り当てられているデバイスノードを入力して表示できることがわかりますecho $SSH_TTY
。私は見ることができますみんなw
who
端末でデバイスノードを入力または使用します(少なくとも私のユーザー名の下)。$SSH_TTY
(または)のスクリプト値を使用して、(たとえば)各セッションの列ディレクトリを決定できます。 IOW、ログインが読み取りに進むとき、値はすでに割り当てられています。~/.profile
~/.bash-profile
SSH_TTY
~/.profile
また、MOTDを通じてユーザーに価値を伝えたいのですが、SSH_TTY
現時点ではそうすることはできません。私考えるこれは、すべてのスクリプトがログイン時に実行され、root
何もないためです。/etc/update-motd.d
root
SSH_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)。