問題なくリモートのLinuxマシンにファイルをコピーできます。
scp file user@Host: /pathtowrite_file
しかし、あるLinuxマシンから別のLinuxマシンにファイルを書き込めないのです。これが私が試みたものです:
echo 'Some Text' > /remotefile.txt | ssh user@remotehost
私が受け取る通知は
stdin:ttyではありません
いずれにせよ、リモートマシン上のファイルは 'Some Text'として送信されたテキストを反映していません。
"cat"コマンドを使ってリモートファイルを作成できます。
echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"
-T
は疑似端末の割り当てを無効にし、メッセージを受け取らないようにします。
Stdinは端末ではないため、擬似端末は割り当てられません。
他の答えより少し短い:
ssh user@remotehost "echo Some Text > /remotefile.txt"
ファイルに追加するためにddを使用することもできます。少しあいまいかもしれませんが、リモートホストでの出力リダイレクトが不可能な場合に便利です。
cat ~/.ssh/id_rsa.pub | ssh [email protected] 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'
この例では、リモートホストのauthorized_keysファイルにあなたの公開鍵を追加します。
これはあなたのクリップボードの内容をMac上で取得し、それをリモートでファイルの最後に追加します。
pbpaste | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
これにより、リモートホスト上のファイルの末尾に書き込む(追加する)ことができます。
echo "Append string to file" | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
vi
、nano
、pico
のいずれかのエディタを使用することができます。
# Just replace "vi" with "nano" or "pico" if you want to use them.
vi remotefile.txt
ただし、その場合はエディタでSome Text
を自分で書き込む必要があるため、このプロセスは実際にはバッチ互換ではありません。
複数回使用する必要がある場合は、このコードを使用する方が簡単かもしれません。 "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