SSH 별칭에 사용되는 "기본" 사용자 이름을 어떻게 설정합니까?

SSH 별칭에 사용되는 "기본" 사용자 이름을 어떻게 설정합니까?

현재 사용자 이름과 다른 사용자 이름을 "기본값"으로 설정하는 별칭을 설정하고 싶습니다. 이와 같이:

$ 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으로 연결 rootssh 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" "$@"
    )
}

관련 정보