私は変数をSSH設定ファイルに解析する方法を探しています。現在、展開前に値を変更するスクリプトがあります。むしろこの段階を取り除きたいです。私は成功せずにマニュアルとリリースノートを何度も読んでいましたが、これが可能かどうかはまだわかりません。
私は次のようにすることが望ましいです:
variable_user = boxuser
Host thisbox
Hostname thisbox
User $variable_user
理想的には、他のすべてが標準化されたままになるように、ユーザー変数に設定を含めたいと思います。
私はあまりにも多くを要求しているのだろうか?
編集する:
構成は$ USER転送を解釈しません。
Host thisbox
Hostname thisbox
User $USER
結果:
$ ssh thisbox
$USER@thisbox's password:
%uも同様です。
答え1
ユーザー使用$USER
環境設定
Host MYHOST
Hostname MYHOST
User $USER
詳しくはこちらをご覧ください。SSH Environment Variables
SSHを使用するときにセッション間で変更されるサーバーの環境変数をどのように設定しますか?
環境変数がクライアントによって解釈されない他の理由は次のとおりです。
- 環境変数です
set correctly
- 環境変数です
exported
- 環境変数がリストされている
ssh_config
ことを確認してください。SendEnv
SendEnv ENV_VARIABLE
- -tオプションを試してください
ssh -t ...
~/.ssh/environment
クライアントでファイルを生成し、サーバーでENV_VARIABLE=VALUE
ファイルをyesに設定します。PermitUserEnvironment
sshd_config
SSHセッションでユーザー環境変数を使用しようとしたが解釈されていない場合、SSHクライアントは環境変数を渡すように構成されていない可能性があります。環境変数を渡すには、ホストに接続するときに -t オプションを使用します。このオプションは、リモートホストに擬似ttyを割り当て、環境変数を渡すようにSSHに指示します。
SSHクライアントの設定やクライアント文書を確認したい場合があります。
または
使い方SendEnv
とAcceptEnv
ガイドライン
これをあなたに追加してください/etc/ssh/sshd_config
AcceptEnv SSH_USER
sshd_config(5) — Linux のマニュアルページの環境を受け入れます。
または
環境を$SSH_USER
使用して目的を設定します。おそらく、すべてのシステムで動作していない可能性があります。
Host MYHOST
Hostname MYHOST
User $SSH_USER
sshコマンドを実行すると、SSH_USER環境変数の値を読み取って$ SSH_USERを上書きします。
新しいターミナルセッションを開くたびにSSH_USER環境変数を設定するか、ターミナルセッションに追加して永続化する必要が~/.bashrc
あります。
Search in the Bash CookBook for $SSH_USER
、レビューの章では、私は1つだけ言及しました。
次の章を確認してください。
10.3 スクリプトで構成ファイルを使用する
15.11 他のマシンから入力を受け取る
10.3スクリプトで構成ファイルを使用するときに発生する問題1つ以上のスクリプトに1つ以上の外部構成ファイルを使用しようとしています。解決策 いくつかの特殊な構成ファイル形式を解析するために、多くのコードを書くことができます。自分に好意を与え、このようなことをしないでください。構成ファイルをシェルスクリプトにし、レシピ10.2のソリューションを使用してください。ディスカッション これは、ファイルをインポートする特定のアプリケーションの1つにすぎません。しかし、bashの法的構文のすべての構成要件を減らす方法について少し考えることができることは注目に値します。特に、ブールフラグとオプションの変数を使用できます(第5章と15.11節を参照)。
# In config file
VERBOSE=0 # 0 or '' for off, 1 for on
SSH_USER='jbagadonutz@' # Note trailing @, set to '' to use the current user
# In script
[ "$VERBOSE" ] || echo "Verbose msg from $0 goes to STDERR" >&2
[...]
ssh $SSH_USER$REMOTE_HOST [...]
もちろん、誤って正しいプロファイルを取得することはユーザーに依存する可能性があるため、ユーザーにコメントを読み、後ろに@を追加するように求めるのではなく、
# If $SSH_USER is set and doesn't have a trailing @ add it:
[ -n "$SSH_USER" -a "$SSH_USER" = "${SSH_USER%@}" ] && SSH_USER="$SSH_USER@"
または単に使用してください:
ssh ${SSH_USER:+${SSH_USER}@}${REMOTE_HOST} [...]
同じ置換を行います。 bash変数演算子:+は次のことを行います。 $SSH_USER に値がある場合、その値を :+ の右側に返します (この場合、変数自体に追加 @ を指定しました)。設定されていないか空の場合は何も返されません。参照•第5章•セクション10.2「インクルードとソースコードによるコードの再利用」•セクション15.11「他のシステムからの入力」
ディスカッション ここではいくつかの興味深い作業を行いました。まず、$ SSH_USERと$ SSH_IDの仕組みを見てください。値がある場合は効果がありますが、空の場合は空のセットに挿入され、無視されます。これにより、コードから値を抽象化できます。これは、その値を構成ファイルに入れたり、コードを関数に入れたり、その両方に入れたりするのに役立ちます。
答え2
カスタムbash / ssh環境がないと、bashはssh構成ファイルを解釈しないため、$ USERはすべてのシステムまたはバージョンで機能しません。
.bashrcファイルを使用してこの問題を解決したり、custom_sshファイルを作成したり、.bashrcファイルを介してインポートしたり、エイリアスまたは変数を作成したりできます。
~/.bashrc
# add to the end of file
source custom_ssh_config
エイリアスを使用する custom_ssh_config ファイル
#!/bin/bash
# USE ALIAS
alias ssh_user_1="ssh ${USER}@HOSTNAME"
user2="myuser2"
alias ssh_user_2="ssh -l ${user2} thisbox"
実行:
ssh_user_1
またはssh_user_2
custom_ssh_config ファイルは変数を使用します。
#!/bin/bash
# USE VARIABLE
ssh_user_1="${USER}"
user2="myuser2"
ssh_user_2="${user2}"
ランニング:
ssh -l $ssh_user_1 thisbox
またはssh -l $ssh_user_2 thisbox
$USER の場合:
ssh -l $USER thisbox
SSH構成ファイルには$ USERユーザーは必要ありません。