SSH를 사용하여 파일에 원격으로 쓰는 방법


41

문제없이 원격 Linux 시스템에 파일을 복사 할 수 있습니다

scp file user@host: /pathtowrite_file

그러나 한 Linux 시스템에서 다른 Linux 시스템으로 파일을 쓰는 데 어려움이 있습니다. 내가 시도한 것은 다음과 같습니다.

echo 'Some Text' > /remotefile.txt | ssh user@remotehost

내가 얻는 통지는

stdin : tty가 아닙니다

어쨌든 원격 시스템의 파일에는 '일부 텍스트'로 전송 된 텍스트가 반영되지 않습니다.

답변:


70

"cat"명령을 사용하여 원격 파일을 작성할 수 있습니다.

echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"

-T비활성화는 할당 단말기를 의사와 메시지를 받고에서 당신을 중지

의사 터미널은 stdin이 터미널이 아니므로 할당되지 않습니다.


그러나 원격 컴퓨터의 기존 파일에 쓰고 싶습니다.
suffa

2
"cat> /remotefile.txt"는 원격 시스템에서 실행되며 기존 파일에 추가하려면 ">"를 ">>"로 대체하십시오.
Aragorn

@ Suffa : 기존 파일에 추가하려고합니까? 또는 파일을 덮어 쓰고 싶지만 파일이 없으면 실패합니까? 또는 무엇을?
David Schwartz

@ David Schwartz-어느 쪽이든. 덮어 쓰고 싶습니다. 끝나지 않으면 실패하지만 ...이 시점에서 추가하는 것입니다.
suffa

`echo '일부 텍스트'| ssh user @ remotehost "tee -a /remotefile.txt"도 저에게 효과적이었습니다.
간단히 Seth

10

다른 답변보다 약간 짧습니다.

ssh user@remotehost "echo Some Text > /remotefile.txt"

3
참된; 원격 파일에 한 줄의 텍스트를 쓰는 것이 실제로 모든 OP가 원하는 모든 경우에 작동합니다. 질문의 명령은 개념 증명 테스트처럼 보입니다. 문제는 "한 Linux 시스템에서 다른 Linux 시스템으로 파일에 쓰는 중"이라고 말합니다. 사용자가 echo로컬이 아닌 임의의 명령 (또는 일련의 명령)을 로컬에서 실행하려는 경우 답변이 도움이되지 않으며 수락 된 답변이이를 수행하는 방법입니다.
Scott

@Scott이 방법을 사용하여 여러 명령을 사용할 수도 있습니다. 대부분의 Linux와 마찬가지로 TMTOWTDI : ssh localhost "echo 'hi'; echo 'hello'; echo 'well, hello there!'
g33kz0r 1

멋진 친구, downvote 주셔서 감사합니다. 내 요점을 실제로 다루는 것보다 쉬운 것 같아? 추신 : 귀하의 의견은 의미가 없습니다.
g33kz0r

1
좋아, 더 많은 비판 을 원해 ? (1) 왜 세상에서 말하는가 ssh localhost? 그것은 물을 더럽 히고 더 명확하게하지 않습니다. (2) 수정 된 예제에서 리디렉션을 표시하지 않으면 명령을 그룹화하고 모든 출력을 하나의 파일로 보내는 방법을 알고 있는지에 대한 질문을 제기합니다. … (계속)
Scott

1
(계속)… (3)“한 줄의 텍스트”라는 문구에 중점을 두어 요점을 놓쳤습니다. 내 요점은 OP가 알려진 텍스트 를 원격 파일에 쓰는 것보다 더 정교한 것을 원할 수도 있다는 것입니다. 그는 에서처럼 로컬 명령 을 실행 하고 원격 파일로 출력을 보낼 수 있습니다. 일반적인 경우를 해결하기 위해 답변을 조정할 수 있다면 그렇게하십시오. command (localhost) > file (remotehost)
Scott

6

dd 를 사용 하여 파일에 추가 할 수도 있습니다. 원격 호스트에서 출력 경로 재 지정이 불가능한 경우 약간 애매하지만 유용 할 수 있습니다.

cat ~/.ssh/id_rsa.pub | ssh user@remote.host 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'

이 예에서는 공개 키를 원격 호스트의 authorized_keys 파일에 추가합니다.

(출처 : http://www.rsync.net/resources/howto/ssh_keys.html )


3

Mac에서 클립 보드의 내용을 가져 와서 파일 끝에 원격으로 추가합니다.

pbpaste | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

이를 통해 원격 호스트의 파일 끝에 쓰거나 추가 할 수 있습니다.

echo "Append string to file" | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

1

여러 번 사용해야하는 경우이 코드를 사용하는 것이 더 쉬울 수 있습니다. "sshpass"도구를 사용하면 ssh는 스크립트를 호출 할 때마다 암호를 묻지 않습니다. (비밀을 유지할 필요가 없다면 사용하지 않는 것이 좋습니다)

sshpass에 대한 자세한 정보를 원하시면 : https://stackoverflow.com/questions/12202587/automatically-enter-ssh-password-with-script

#!/bin/bash

SCRIPT="echo 'nameserver 8.8.8.8' > /etc/resolv.conf"        

if [ "$#" -ne 1 ]; then
        echo "Wrong number of arguments. usage: prog dest_machine"
else
        sshpass -p "root" ssh -o StrictHostKeyChecking=no root@"$1" "${SCRIPT}"
fi

무엇보다 직관적입니까? 이것은 본질적으로 g33kz0r의 답변 (거의 2 년 전) 과 동일하며 특별히 명확하지 않은 종소리와 휘파람입니다. 최소한 추가 한 내용을 설명하십시오.
Scott

너무 많은 인수로 스크립트를 호출하면 인수가 너무 적다 는 오류 메시지가 표시 됩니다.
G-Man, 'Reinstate

네, 거의 똑같습니다. 한 가지 더하면 사용하기가 조금 더 쉽다는 것입니다 (여러 번 필요한 경우). 그리고 예 오류 메시지가 좋지 않습니다, 나는 그것을 고칠 것입니다.
sergeyrar

1

당신은 단순히 사용 vi하거나 nano또는 pico편집기 :

# Just replace "vi" with "nano" or "pico" if you want to use them.
vi remotefile.txt

그러나 Some Text편집기에서 직접 작성해야하므로이 프로세스는 실제로 일괄 호환되지 않습니다.


-1

아래와 같이 스크립트를 작성하십시오.

# !/bin/bash

read -p "Enter target server IP : " server
echo "Enter root password for $server : " ; read -s password

yum install sshpass -y

sshpass -p "$password" ssh -o strictHostKeyChecking=no root@$server echo "your text goes here" >> /remotefile.txt

나는 yum정당한 이유없이 같은 새로운 명령을 사용하지 않는 누군가로부터 다운 보트를 본다 . 이 답변은 그 이유를 보여줍니다. (
당분간 공감대 취소
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.