現在のユーザー名とは異なるユーザー名を「デフォルト」に設定するエイリアスを設定したいと思います。このように:
$ echo $USER # outputs kamil
$ alias myssh='ssh -o User=somebody' # non-working example of what I want to do
$ myssh server # Uses somebody@server - all fine!
$ myssh root@server # I want it to use root@server, but it does not. It connects to `somebody@server`!
# Easy testing:
$ myssh -v root@localhost |& grep -i 'Authenticating to'
debug1: Authenticating to localhost:22 as 'somebody'
# ^^^^^^^^ - I want root!
上記のコードは機能しません。ユーザーroot@server
は覆われた合格-o User=somebody
。私が一緒にできること:
myssh() {
# parse all ssh arguments -o -F etc.
if [[ ! "$server_to_connect_to" =~ @ ]]; then # if the use is not specified
# use a default username if not given
server_to_connect_to="somebody@$server_to_connect_to"
fi
ssh "${opts[@]}" "$server_to_connect_to" "${rest_of_opts[@]}"
}
ただし、サーバー名を抽出してユーザー名を追加するには、関数のすべてのSSHパラメータを解析する必要があります。解決策は修正して~/.ssh/config
追加することですHost * User somebody
。しかし、私はコンピュータにいます。ホームディレクトリへの書き込み権限がありません。(実際にはホームディレクトリがまったくありません)設定ファイルを変更することはできず、通常の操作をssh
上書きしたくありません。
変更なしでサーバーに接続するための「デフォルトの上書き可能」ユーザーを指定する簡単なソリューションはありますか~/.ssh/config
?
答え1
エイリアスを使用せずにSSHクライアントのみを構成してください。編集(または存在しない場合は作成)~/.ssh/config
し、次の行を追加します。
Host rootServer
HostName server_to_connect_to
User root
Host userServer
HostName server_to_connect_to
User somebody
ファイルを保存すると、次に接続して次にssh rootServer
接続を実行できるようになります。root
ssh userServer
somebody
答え2
変数を使用してユーザー名を設定し、デフォルト値に戻すこともできます。
myssh() {
ssh -o "User=${user:-somebody}" "$@"
}
次のように使用してください。
myssh server # use default user
user=root myssh -v server # use root as the username
答え3
一時ファイルを作成し、ssh
そのファイルを構成に渡して-F
追加できますHost * User somebody
。
myssh() {
(
# in a subshell, so that `trap` will not affect parent
local tmp
tmp=$(mktemp --tmpdir .cis-ssh-config.XXXXXXXXXXX)
trap 'rm "$tmp"' exit
{
printf "%s\n" "Host *" " User somebody"
# silence errors, if the files doesn't exists
cat /etc/ssh/ssh_config ~/.ssh/config 2>/dev/null ||true
} > "$tmp"
ssh -F "$tmp" "$@"
)
}