@ArekBurdach의 대답에 대한 정교한 변형이 있습니다. 다음과 같은 확장 기능을 제공합니다.
- 호스트는 어디서나 할 수 있습니다
ssh
명령 줄; 즉, 그것은 또한 ssh <args> <host> <commands>
구문을 지원 합니다
- 경로를 하드 코딩하지 않습니다
ssh
- 보다 강력한 구문 분석
ssh_config
- 보너스 :에 대한 래퍼
scp
도
ssh-wrapper
#!/bin/bash
password=$(awk '
BEGIN {
# Collect the SSH arguments as keys of a dictionary, so that we can easily
# check for inclusion.
for (i = 2; i < ARGC; i++) {
sshArgs[ARGV[i]] = 1
}
# Only process the first argument; all others are the command-line arguments
# given to ssh.
ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
if ($2 in sshArgs)
inhost=1
else
inhost=0
}
' ~/.ssh/config "$@")
if [ "$password" ]; then
sshpass -p "$password" "$(which ssh)" "$@"
else
"$(which ssh)" "$@"
fi
scp-wrapper
#!/bin/bash
password=$(awk '
BEGIN {
# Collect the SCP arguments as keys of a dictionary, so that we can easily
# check for inclusion.
for (i = 2; i < ARGC; i++) {
colonIdx = index(ARGV[i], ":")
if (colonIdx > 0) {
scpArgs[substr(ARGV[i], 1, colonIdx - 1)] = 1
}
}
# Only process the first argument; all others are the command-line arguments
# given to scp.
ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
if ($2 in scpArgs)
inhost=1
else
inhost=0
}
' ~/.ssh/config "$@")
if [ "$password" ]; then
sshpass -p "$password" "$(which scp)" "$@"
else
"$(which scp)" "$@"
fi
설치
에 별칭을 정의하십시오 ~/.bashrc
.
alias ssh=ssh-wrapper
alias scp=scp-wrapper
구성
IgnoreUnknown
지시문을 사용하면 ssh
새로 도입 된 Password
지시문 에 대해 불평하지 않으므로 @ArekBurdach의 답변과 달리 "실제"구성으로 표시 할 수 있습니다. 마음에 들지 않으면 스크립트를 주석 처리 된 스크립트로 다시 변경하는 것이 쉽지 않습니다.
# Allow specifying passwords for Host entries, to be parsed by ssh-wrapper.
IgnoreUnknown Password
Host foohost
User baruser
Password foobarpassword