SSH構成の変数ユーザー名

SSH構成の変数ユーザー名

私は変数を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環境変数

SSH接続に環境変数を渡す

SSH - 接続ごとに環境変数を設定する

SSHを使用するときにセッション間で変更されるサーバーの環境変数をどのように設定しますか?

環境変数がクライアントによって解釈されない他の理由は次のとおりです。

  1. 環境変数ですset correctly
  2. 環境変数ですexported
  3. 環境変数がリストされている ssh_configことを確認してください。SendEnvSendEnv ENV_VARIABLE
  4. -tオプションを試してくださいssh -t ...
  5. ~/.ssh/environmentクライアントでファイルを生成し、サーバーでENV_VARIABLE=VALUE ファイルをyesに設定します。PermitUserEnvironmentsshd_config

SSHセッションでユーザー環境変数を使用しようとしたが解釈されていない場合、SSHクライアントは環境変数を渡すように構成されていない可能性があります。環境変数を渡すには、ホストに接続するときに -t オプションを使用します。このオプションは、リモートホストに擬似ttyを割り当て、環境変数を渡すようにSSHに指示します。

SSHクライアントの設定やクライアント文書を確認したい場合があります。

または

使い方SendEnvAcceptEnvガイドライン

これをあなたに追加してください/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ユーザーは必要ありません。

関連情報