스크립트 기능에서 쉘 변경

스크립트 기능에서 쉘 변경

메인 셸로 ZSH가 있지만, .zshrc빌드를 새로 고칠 때 내 개발 상자에 더 쉽게 ssh를 연결할 수 있도록 Expect를 사용하여 ssh 명령을 설정하고 싶습니다(실제로 보안은 필요하지 않습니다. 이 모든 것이 켜져 있습니다). 인트라넷)의 일종). sshshell 을 사용하여 비밀번호를 전달할 수 있습니다 !#/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

이미 언급했듯이초로바, 이 shebang은 일반 댓글 라인이 되었습니다.

대신 별도의 Expect 스크립트 파일을 사용할 수 있습니다.트레독:

function expect_ssh () {
expect <<'EOF'
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 ? <==
EOF
}

답변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

관련 정보