반응형

expect

Expect는 스크립트에 따라서 다른 상호작용하는 프로그램과 대화하는 프로그램입니다. 번역된 언어는 대화를 하는 데 있어서 분기와 높은 수준의 제어 구조를 제공합니다. 게다가, 사용자는 스크립트로 원할 때 직접 상호작용하면서 제어를 할 수 있습니다.

Expect는 사용자 수준의 어떤 프로그램이나 작업에 대한 명령어로서 실행될 수 있습니다. Expect는 실제로 동시에 여러 프로그램과 대화할 수 있습니다.

사용예시

https://github.com/SDRLurker/shell

mssh.sh

mssh.sh 실행할서버 SSH포트 "명령"

shell 내의 sexecute() 함수가 있습니다. 

ssh로 서버에 접속하여 $PW를 보내 비밀번호를 자동으로 입력하는 기능을 합니다.

# 원격 서버에 접속하여 shell 명령을 수행합니다.
sexecute()
{

local IP=$1
local PORT=$2
local PW=$3
local MSG=$4 

if [ -z $PORT ]; then
    PORT=22
fi

echo "ssh -p$PORT $IP $MSG"
expect <<EOF
set timeout -1
spawn ssh -p$PORT $IP $MSG # SSH로 $IP와 $PORT로 접속해 $MSG명령을 실행하기 위해 접속
expect "password:"                    # SSH에서 password라는 글자를 받으면 다음 줄로 넘어간다.
send "$PW\r"                              # 비밀번호 $PW 문자열을 입력한다.
expect eof
EOF

}

 


출처

http://linux.die.net/man/1/expect

반응형
반응형

출처 : http://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?

저는 원격 컴퓨터에서 로컬 shell script(윈도우즈/리눅스)를 실행해야 합니다.

A 컴퓨터와 B컴퓨터 모두에서 설정된 ssh가 있습니다. 저의 스크립트는 B컴퓨터에서 수행할 내용이 A컴퓨터에 있습니다.

로컬과 원격 컴퓨터는 윈도우즈나 유닉스 기반의 시스템일 수 있습니다.

plink/ssh를 사용하여 이를 실행할 수 있는 방법이 있을까요?


20개의 답변 중 1개의 답변

만약 A 컴퓨터가 Windows box라면 -m 파라미터와 함께 Plink(PuTTY의 일부)를 사용하실 수 있고 원격 서버에 로컬(내 컴퓨터의) 스크립트를 실행할 것입니다.

plink root@MachineB -m local_script.sh

만약 A컴퓨터가 유닉스를 기반으로한 시스템이면 다음처럼 사용할 수 있습니다.

ssh root@MachineB 'bash -s' < local_script.sh

이를 수행하기 위해 스크립트를 원격 컴퓨터로 복사하실 필요가 없습니다.


(번역과 관련없는) 추가내용

ssh 뿐만이 아니라 rsh도 똑같은 방법으로 실행이 가능합니다.

ssh root@MachineB 'bash -s' < local_script.sh

ssh 계정명@원격호스트(IP) 수행할명령어 < 로컬_스크립트.sh

만약 원격 컴퓨터의 프로그램이 수행이 되지 않는다면

로컬_스크립트.sh에서 export LD_LIBRARY_PATH를 원격컴퓨터에 맞게 설정하셔야 됩니다.

예) export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib

반응형

'리눅스 shell' 카테고리의 다른 글

expect  (0) 2015.08.09
리눅스 쉘에서 '>/dev/null 2>&1'의 뜻이 무엇인가요?  (2) 2015.07.10
rsync  (0) 2015.02.17
왜 쉘 명령어가 \(백슬래시)로 시작하나요?  (0) 2014.07.08
fg  (0) 2011.08.03
반응형

출처 : http://stackoverflow.com/questions/15691977/why-start-a-shell-command-with-a-backslash

왜 쉘 명령어가 \(백슬래시)로 시작하나요?

\curl -L https://get.rvm.io | bash -s stable

왜 이 명령어가 '\'로 시작하나요 ? 여기를 클릭하면 제가 본 사이트입니다.

2개의 답변

alias curl='curl --some --default --options'

만약 당신이 curl 이란 alias를 설정해 놓았고 이 alias를 사용하고 싶지 않다면 백슬래시를 넣음으로써 alias를 사용하게 않고 curl 바이너리를 직접 실행하도록 합니다.

이는 현재 사용중인 쉘(shell)에서만 적용됩니다. alias는 쉘 스크립트에서는 효과가 없기 때문에 거기엔 넣을 필요가 없습니다. 




 Bourne/POSIX 쉘 명세서는 says 현재 사용중인 쉘에서 alias 치환은 명령어가 인용에 사용하는 문자들이 있을 때 억제된다고 설명이 되어 있습니다. 백슬래시가 그 중 한 방법이고 작은 따옴표와 큰 따옴표를 통해 다른 알려진 방법으로 인용하는 방법도 있습니다. 다음 모두는 alias 치환을 억제할 것입니다.
 \curl
 cur\l
 \c\u\r\l
 "c"url
 "curl"
 "c""u""r""l"
 'curl'
 'cu'"rl"

 \curl 를 사용하는 것은 가장 보편적이고 읽기 쉬운 방법입니다. 이는 표준화된 특징이기 때문에 모든 Bourne 쉘에서 잘 작동할 수 있습니다.

반응형

'리눅스 shell' 카테고리의 다른 글

ssh를 사용하여 원격 컴퓨터의 shell script를 실행하는 방법?  (0) 2015.03.26
rsync  (0) 2015.02.17
fg  (0) 2011.08.03
iostat  (0) 2011.08.03
ntsysv  (0) 2011.07.12

+ Recent posts