2013-08-13 4 views
0

나는 일반적으로 여러 ssh를 홉 이상이 시도하지 않지만 제한으로 인해이 나의 유일한 선택이다.2 홉 ssh에서

ssh -i ~/.ssh/host-rsync-key user\@server1 "'sed -i /ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

하는 두 번째 ssh를 믹스에 뛰어 추가하고 내가 쉘이 뭔가를 제거하고에이 명령을 일으키는 생각 :이처럼 잘 작동 다음 원격 명령을 실행하려고

server2에서는 실행되지 않지만 server1에서는 실행되는 것으로 보입니다.

ssh -A -t -o -i ~/.ssh/host-rsync-key user\@server1 ssh -A -o -i ~/.ssh/host-rsync-key user2\@server2 "'sed -i /ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

사람은 ssh를 통해이 나오지 명령을 수행하는 데 필요한 적절한 탈출에 도움을 줄 수 있을까요? grep 명령을 2 홉 이상 실행할 수 있으므로 sed 명령과 관련된 문자를 이스케이프 처리한다고 생각됩니다.

도움이 될 것입니다.

+1

[구조에 대한 프록시 명령] (http://undeadly.org/cgi?action=article&sid=20070925181947) (대부분의 다른 기본값을 설정할 수도 있음) – Wrikken

답변

0

인용문이 잘못되었을 수 있습니다.

이 작동 할 수있다 : 나는 유사한 문제로 실행하고 있었고, 난이 문자열의 각 공간을 탈출하고 싶지 않았기 때문에 좀 더 파고 않았다

ssh -A -t -o -i ~/.ssh/host-rsync-key user\@server1 "ssh -A -o -i ~/.ssh/host-rsync-key user2\@server2 sed -i '/ADD_NEW_BELOW/a <server>domain</server>' /config.xml"

+0

그래서 지출에 대한 답변을 찾았습니다. 몇 시간 동안 파고 들었다. 이 작업은 ssh -A -t -o TCPKeepAlive = yes -o ServerAliveInterval = 50 -i ~/.ssh/host-rsync-key user1 \ @ server1 ssh -A -o TCPKeepAlive = yes -o ServerAliveInterval = 50 -i ~/-i 나오지 서버 2 @ \ 사용자 2 스푸핑/호스트 rsync를 키 " '/ \ _new \ _BELOW/A \\\ \\\ $ 도메인 \\\ <\\\/서버 \\\> ADD'설정. xml " – user2680500

0

. 이를 디버그하는 방법은 문자열을 에코하여 파일에 쓰고 원격 호스트에서 문자열이 어떻게 보이는지 확인하는 것입니다. 내가 함께 결국 해결책은, 전체에 큰 따옴표를 사용하는 것입니다, 그들을 탈출, 즉 :

ssh -A -t -o -i ~/.ssh/host-rsync-key [email protected] "ssh -A -o -i ~/.ssh/host-rsync-key [email protected] \"sed -i /ADD_NEW_BELOW/a <server>domain</server>\" /config.xml" 

나는 확실히 작동하는지 필요 유사한 솔루션, 2 홉을 통해 MySQL의 명령 줄 쿼리를 발사 :

ssh -C [email protected] "ssh -C [email protected] \"echo 'SELECT field FROM database.table WHERE term=condition' | mysql -u mysqluser --password=mysqlpassword -B \"" 
내가 특수 문자의 이스케이프없이 작은 따옴표를 사용 할 수있는 두 번째 홉에 둘러싸도 또 하나의 문자열을 필요로하는 방법

주 (하지만 examaple에서, 나는 당신이 심지어 필요하다고 생각하지 않습니다).