~/.ssh/rcでsshとscpを区別する方法は?

~/.ssh/rcでsshとscpを区別する方法は?

neofetchOpenSSHを介してリモートサーバーにログインするたびに(バナーを表示する小さなユーティリティ)を起動したいと思います。だから私/usr/bin/neofetchはファイルに追加しただけで~/.ssh/rc正常に動作します。問題は、サーバーに行っても~/.ssh/rc構文解析されることです。完全scpなコマンドscpはうまく機能しますが、オートコンプリート機能を使用しようとすると問題が発生します。scp入力すると、<Tab><Tab>リモートサーバーで利用可能なファイル/フォルダが表示されます。たとえば、次のようになります。

$ scp remote-host:/t <TAB><TAB>
\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\"\\\"\\\"\\\  
\\\ \\\$\\\$\\\:\\\ \\\ \\\ \\\ \\\ \\\ \\\$\\\$.\\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m-^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\,d\\\$\\\$\\\'\\\  
\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b.\\\  
\\\ \\\,\\\$\\\$P\\\'\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$\\\$.\\\  
\\\ \\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ d\\\$\\\'\\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\,^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\$\\\$P\\\  
\\\'\\\,\\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\,ggs.\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b\\\:\\\  
\\\ \\\$\\\$\\\;\\\ \\\ \\\ \\\ \\\ \\\ Y\\\$b._\\\ \\\ \\\ _\\\,d\\\$P\\\'\\\  
^[\\\[0m^[\\\[1m\\\ \\\`\\\$\\\$b\\\ \\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\"-.__\\\  
^[\\\[0m^[\\\[1m\\\ \\\ \\\`Y\\\$\\\$\\\ 
(...)

通常は(たとえば)で始まるファイル/フォルダを表示します$ scp remote-host:/t <TAB><TAB>が、今ではバナーを表示します。/t/tmpneofetch

区別する方法はありますか$ ssh(サーバーに入るときだけ起動し、サーバーに入るときは起動しません$ scp)?~/.ssh/rcneofetchsshscp

注:私はbashを起動するたびにneofetchを起動したくないので、ログインシェルを起動するたびにneofetchを起動したくないので、それを入れたり減算する/etc/bash.bashrcこと/etc/profileはオプションではありません。 SSH接続後に始めたいです。

私はいくつかの調査をしていくつかを試しました。

  • からインスピレーションを受けるこの投稿、私は以下を試しました。

    if [ -t 0 ]; then /usr/bin/neofetch; fi

    そして

    if tty > /dev/null; then /usr/bin/neofetch; fi

    しかし、うまくいきません(neofetch一度も起動せず、それ以降も起動しません$ ssh)。

  • 促すその投稿を通して$-また、対話型セッションと非対話型セッションを区別するために環境変数を使用してみましたが、~/.ssh/rcbashではなくダッシュで解析したため、機能しませんでした(そして$-bash変数でした)。

しかし、私はうまくいく解決策を見つけました(まあ、一種の…)。優れたこの記事を通して:

  • サーバーに~/.ssh/rc次のように入力します。

    if [ ! "$LC_SCP" = "yes" ]; then /usr/bin/neofetch; fi

  • クライアントでは、LC_SCP次のように環境変数を設定する必要があります$ scp

$ export LC_SCP=yes

$ scp -o SendEnv=LC_SCP remote-host:/t<TAB><TAB>
(works, doesn't launch neofetch)

うまくいきますが面倒です。とのセッションsshを区別するためのより良い方法はありませんか?scp~/.ssh/rc

ベストアンサー1

環境変数はing時SSH_TTYのみに設定され、ing時には設定されないようです。したがって、次のもので十分です(少なくとも私のテストでは)。sshscp

if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi

(価値が何であるかは出力を見て推測しましたenv | grep -i ssh。)

おすすめ記事