원격 컴퓨터에서 셸 스크립트(Windows/Linux)를 실행해야 합니다.
A 머신과 B 머신 모두에 SSH가 구성되어 있습니다. 내 스크립트는 A 머신에 있으며 원격 머신인 B 머신에서 내 코드 중 일부를 실행할 것입니다.
로컬 컴퓨터와 원격 컴퓨터는 Windows 또는 유닉스 기반 시스템일 수 있습니다.
plink/ssh를 사용하여 이 작업을 실행할 수 있는 방법이 있나요?
만약 시스템 A 는 Windows https://xxx. 가용 스루풋 (일부를 [PuTTY] [1]) 를 사용할 수 있습니다 - m 매개변수에서 로컬 및 원격 서버에 스크립트입니다 autoexec. 것입니다.
plink root@MachineB -m local_script.sh
만약 시스템 A 는 유닉스 기반의 시스템을 사용할 수 있습니다.
ssh root@MachineB 'bash -s' < local_script.sh
[1]: http://www.chiark.greenend.org.uk/ ~ sgtatham/putty/
ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH
이 사용자 입력을 필요로 하는 promi 명령과 함께 사용할 수 있습니다. (& # 39 이스케이프된 헤르두치 참고합니다 ',')
편집: 이 질문에 계속 추가 정보를 얻을 수 있기 때문에, 이 멋진 사용하는 것보다 더 많은 트래픽을 꼭 이래야겠어요 헤르두치:
구문, 그게 대체하십시오 중첩시키거나 명령을 사용할 수 있는 유일한 방법은 중첩하기 것 같다 (받을시간은 sane 방식)
ssh user@host <<'ENDSSH'
#commands to run on remote host
ssh user@host2 <<'END2'
# Another bunch of commands on another host
wall <<'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
실제로 일부 등의 서비스를 telnet, ftp, 상술합니다 대화를 가질 수 있습니다. 하지만, 이 사실을 헤르두치 그냥 report. stdin 텍스트로 응답을 기다릴 줄 사이 doesn& # 39, t
편집: 방금 알아낸 탭들 , 를 사용하는 경우 신체 들여쓰려면 수 있는 ',' < < - 끝!
ssh user@host <<-'ENDSSH'
#commands to run on remote host
ssh user@host2 <<-'END2'
# Another bunch of commands on another host
wall <<-'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<-'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
(이 노력해야 할 것 같아요)
또한, t forget don& # 39 를 구축한 이스케이프입니다 com/go/4e6b330a_kr 스케쳐내 좀 대상에서 호스트입니다.
이 때문에 나를 데리고 포착됨 것이다.
예를 들면 다음과 같습니다.
user@host> ssh user2@host2 "echo \$HOME"
/home/user2 를출력합니다
동시에
user@host> ssh user2@host2 "echo $HOME"
/home/user 를출력합니다
또 다른 예를 들어:
user@host> ssh user2@host2 "echo hello world | awk '{print \$1}'"
를출력합니다 " hello"; 것입니다.
이는 확장명으로 YarekT& # 39 라는 질문에 대한 환경 변수를 사용하여 원격 명령, 인라인 합칩니다 로컬 시스템의 원격 호스트 매개 변수화 수 있도록 반군지역 스크립트에 대한 원격 사이드에서:
ssh user@host ARG1=$ARG1 ARG2=$ARG2 'bash -s' <<'ENDSSH'
# commands to run on remote host
echo $ARG1 $ARG2
ENDSSH
I found it all in one) 이 매우 도움됐네 유지하면 스크립트입니다 it& # 39, 그래서 아주 읽기 및 관리할 수 있습니다.
왜 이 작동합니다. ssh 다음 구문을 지원합니다.
>. ssh user@host remote_command
우리는 정의하십시오 bash 등의 명령을 실행하기 전에 한 줄에 환경 변수를 지정할 수 있습니다.
>. # 39, & # 39, value1& env_var_1 = # 39, & # 39, value2& env_var_2 = c $1$ # 39, & # 39, 에코 envvar env_var_2& 배시
Com/go/4e6b330a_kr 쉽게 정의할 수 있게 해 주는 명령 실행하기 전에. 이 경우, re we& # 39 이 명령을 실행하는 것이 특징이다. 전에 모든 에코 eventtest 환경 변수.
따라서, 이러한 두 가지 기능 및 YarekT& 합칩니다 # 39 라는 질문에 프레젠테이션이든:
>. ssh user@host ARG2 & # 39, 배시 s& ARG1 = $ ARG1 ARG2 = $ # 39 -; # 39, & # 39 ENDSSH& < <;;).
이 경우 우리는 ARG2 ARG1 설정 및 현지 값. 이후 remote_command user@host 보내는 모든 것을 할 수 있다. Arg1 ARG2 로컬 및 원격 컴퓨터에 명령을 실행합니다 때 주로 설정되었습니다 덕분에 현지 환경 변수 값을 정의하는 명령줄이 평가 후 해당 변수를 사용하여 원격 서버에 bash - s 명령을 실행합니다. 짜잔.
'원격' 컴퓨터에 수동으로 로그인하지 않고 '로컬' 컴퓨터에서 자동으로 이 작업을 수행한다고 가정하면, 이러한 상황을 위해 정확하게 설계된 Expect라는 TCL 확장 프로그램을 살펴봐야 합니다. SSH를 통한 로그인/상호 작용을 위한 스크립트 링크도 제공했습니다.
해답은 여기 (https://stackoverflow.com/a/2732991/4752883) 는 멋지구리해요 경우
이 경우 스크립트에 여러 개의 줄을 사용할 수 있는 '리눅스'.
`plink root@MachineB -m local_script.bat`
습관 작동합니까.
스크립트의 첫 줄만 실행됨을. 이것은 아마도 한 가용 스루풋 제한은라이센스 '의'.
Multiline 일괄작업 스크립트를 실행하려면 (특히 it& # 39 의 경우 비교적 간단하지만, 몇 줄의 구성된):
만약 기존 일괄작업 스크립트입니다 다음과 같습니다
cd C:\Users\ipython_user\Desktop
python filename.py
선을 사용하여, & & " " 함께 사용할 수 있습니다;;; seperator 다음과 같이 네 'local_script.bat' file: <, https://stackoverflow.com/a/8055390/4752883>,:
cd C:\Users\ipython_user\Desktop && python filename.py
이 후, 여기서 스크립트입니다 의해 실행하십시오 지적한 대로 변경할 수 있습니다. @JasonR.Coombs: <, https://stackoverflow.com/a/2732991/4752883>. 호스트당:
가용 스루풋 root@MachineB m local_script.bat '-'
배치처리 스크립트입니다 경우 비교적 복잡한 배치처리 사용하는 것이 좋을 수 있습니다 물론 어떤 명령을 지적한 대로 inet6.0 스크립트입니다 캡슐화합니다 가용 스루풋 여기 (https://stackoverflow.com/a/32196999/4752883>) 에서 @martin <;:
rem Open tunnel in the background
start plink.exe -ssh [username]@[hostname] -L 3307:127.0.0.1:3306 -i "[SSH
key]" -N
rem Wait a second to let Plink establish the tunnel
timeout /t 1
rem Run the task using the tunnel
"C:\Program Files\R\R-3.2.1\bin\x64\R.exe" CMD BATCH qidash.R
rem Kill the tunnel
taskkill /im plink.exe
이 배시 스크립트입니다 는 ssh 로 실행하십시오 타겟일 일부 명령을 원격 시스템의 원격 시스템에 설치할 것을 잊지 마십시오 작성되지는 실행하기 전에 (mac 의 작성되지는 '설치' 브루 (brew)
#!/usr/bin/expect
set username "enterusenamehere"
set password "enterpasswordhere"
set hosts "enteripaddressofhosthere"
spawn ssh $username@$hosts
expect "$username@$hosts's password:"
send -- "$password\n"
expect "$"
send -- "somecommand on target remote machine here\n"
sleep 5
expect "$"
send -- "exit\n"