현재 사용자 이름과 다른 사용자 이름을 "기본값"으로 설정하는 별칭을 설정하고 싶습니다. 이와 같이:
$ 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" "$@"
)
}