web-dev-qa-db-ja.com

SSHを使ってリモートでファイルに書く方法

問題なくリモートのLinuxマシンにファイルをコピーできます。

scp file user@Host: /pathtowrite_file

しかし、あるLinuxマシンから別のLinuxマシンにファイルを書き込めないのです。これが私が試みたものです:

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

私が受け取る通知は

stdin:ttyではありません

いずれにせよ、リモートマシン上のファイルは 'Some Text'として送信されたテキストを反映していません。

39
suffa

"cat"コマンドを使ってリモートファイルを作成できます。

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

-Tは疑似端末の割り当てを無効にし、メッセージを受け取らないようにします。

Stdinは端末ではないため、擬似端末は割り当てられません。

65
Aragorn

他の答えより少し短い:

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

ファイルに追加するためにddを使用することもできます。少しあいまいかもしれませんが、リモートホストでの出力リダイレクトが不可能な場合に便利です。

cat ~/.ssh/id_rsa.pub | ssh [email protected] 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'

この例では、リモートホストのauthorized_keysファイルにあなたの公開鍵を追加します。

(出典: http://www.rsync.net/resources/howto/ssh_keys.html

6
sdl

これはあなたのクリップボードの内容をMac上で取得し、それをリモートでファイルの最後に追加します。

pbpaste | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'

これにより、リモートホスト上のファイルの末尾に書き込む(追加する)ことができます。

echo "Append string to file" | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
3
David

vinanopicoのいずれかのエディタを使用することができます。

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

ただし、その場合はエディタでSome Textを自分で書き込む必要があるため、このプロセスは実際にはバッチ互換ではありません。

1
Riptide9.7

複数回使用する必要がある場合は、このコードを使用する方が簡単かもしれません。 "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
1
sergeyrar