質問:すべての名前を持つローカルユーザーのリストを含むサーバーAがありますsomething-ops
。ただし、Aから他のすべてのサーバーにSSHを接続するときsomething-admin
。joe-ops
joe-admin
試み:私は私たちがどこにいてもよいことを知っています/home/$USER/.ssh/config
Host *
username: joe-admin
ただし、ユーザーごとにこれを設定して維持するのはやや面倒です。特にではなくと$USER
同じだからです。something-ops
something
スクリプトまたは変数置換を使用して各ユーザーに対して変更を実行できますかuser-ops
?user-adm
/etc/ssh/ssh_config
答え1
ラッパースクリプトを試してみてください。
#! /bin/sh
username=${USER%-ops}-admin
exec /usr/bin/ssh -l "$username" "$@"
に入れるか、 から以前に適切な名前のファイルに入れます/usr/local/bin/ssh
(もちろん、別の場所にある場合は、それに応じてすべてを調整してください)。ssh
/usr/bin
$PATH
ssh
/usr/bin
scp
同様のラッパースクリプトがある場合は、それを持つこともできます。sftp
スクリプトをオーバーライドする必要があるユーザーは、実際のバイナリの場所を呼び出すことができます。
答え2
間違いなくユーザーが正しくログインすることを覚えていない場合(および/または自分で ~/.ssh/config
個人設定を設定できない場合)、IMHOは最初に管理者権限を付与しないでください。
ユーザーを満足させたい場合は、~/.ssh/config
正しい情報でパーソナライズされたコンテンツを設定することが最善の選択です。
Host *
username: login-admin
~/.ssh/config
そのホームディレクトリテンプレートのファイルがそのままコピーされ、メカニズムがカスタムサポートを提供していないため、テンプレートを使用して/etc/skel/
各(新しい)ユーザーに設定することはできません。
この問題を解決するために、エントリがないすべてのユーザーが初めてログインしたときにそのファイルが作成されるか、正しいエントリでいっぱいになっていることを~/.ssh/config
確認したいと思います。Host *
一つの方法はです/etc/profile.d
。
拡張機能を含むスクリプトは.sh
通常、ユーザーがbashログインシェルを使用してログインするたびに実行されます。同様に、拡張機能を持つスクリプトは.csh
通常、cshが割り当てられているユーザーに対して実行されます。
# /etc/profile.d/ssh-config.sh
if ! grep -qi "host *" ~/.ssh/config 2&>1
then
if [ ! -d ~/.ssh/ ]
then
# Set up .ssh dirctory with correct permissions
mkdir ~/.ssh/ && chmod 0700 ~/.ssh/
fi
echo "Host *
username: ${USER%-ops}-admin" >> ~/.ssh/config && chmod 0600 ~/.ssh/config
fi