메인 셸로 ZSH가 있지만, .zshrc
빌드를 새로 고칠 때 내 개발 상자에 더 쉽게 ssh를 연결할 수 있도록 Expect를 사용하여 ssh 명령을 설정하고 싶습니다(실제로 보안은 필요하지 않습니다. 이 모든 것이 켜져 있습니다). 인트라넷)의 일종). ssh
shell 을 사용하여 비밀번호를 전달할 수 있습니다 !#/usr/bin/expect
.
이게 코셔인가요?
password=sick_awesome_password6969
function expect_ssh () {
# I enter expect shell at the beginning of this function <==
#!/usr/bin/expect
set timeout 20
set cmd [lrange $argv 1 end]
set password [lindex $argv 0]
eval spawn $cmd
expect "password:"
send "$password\r";
interact
exit 0 # Then escape from it ? <==
}
default_boxssh_subnet=1
function bosh () {
if [[ ! $1 == *"."* ]];
then
# ssh [email protected].$default_boxssh_subnet.$1
expect_ssh 10.10.$default_boxssh_subnet.$1
else
# ssh [email protected].$1
expect_ssh 10.10.$default_boxssh_subnet.$1
fi
}
답변1
답변2
초로바 님의 댓글을 남겨두고, 그걸 빨아들이고 내에서 호출할 헬퍼 스크립트를 작성했습니다. .zshrc
(비밀번호도 '글쎄, 이미 하나 더 만들고 있구나'라는 생각에 파일에 넣어두었습니다.)
어, 내 도트 파일이 엉망이 될 것 같아요.
.zshrc
function expect_ssh () {
expect ~/.exp $2 ssh $1
}
. ~/.password_file.conf
default_boxssh_subnet=1
function bosh () {
if [ -z "$2" ];
then
func_password=$bosh_password
else
func_password=$2
fi
if [[ ! $1 == *"."* ]];
then
#ssh [email protected].$default_boxssh_subnet.$1
expect_ssh [email protected].$default_boxssh_subnet.$1 $func_password
else
#ssh [email protected].$1
expect_ssh [email protected].$default_boxssh_subnet.$1 $func_password
fi
}
.exp
#!/usr/bin/expect
set timeout 20
set cmd [lrange $argv 1 end]
set password [lindex $argv 0]
eval spawn $cmd
expect "password:"
send "$password\r";
interact