Macbook SSHターミナルを使用して、RSAキーペアを生成し、承認された権限でリモートid_rsa.pub
をアップロードしました。リモートのApache Webサーバーに接続できます。私は作成、開く、移動、変更することができ、予備検査でWebサーバー上のファイルを管理でき、問題はありません...そしてエラーメッセージを生成しません。
驚いたことに、デスクトップからリモートサーバーにフォルダやドキュメントをscp
できません。また、リモートサーバーからデスクトップにフォルダーやドキュメントをscp
することもできません。エラーメッセージを受け取るたびに:
stdin:ttyではありません
リモートWebサーバーとの間のscp
コマンドは、絶対ファイルまたは相対ファイルの場所の参照では機能しません。
私の標準構文は次のようになります。
ローカルホストから:
scp -rp ~/Desktop/foldername [email protected]:~/public_html
リモートホストから:
scp -rp [email protected]:~/public_html/foldername ~/Desktop/
stdin: is not a tty
エラーメッセージに問題があるようです。
どうしたの?
このエラーがファイル転送を妨げている場合、どうすればstdin: is not a tty
を解決できますか?
これは、ターゲットサーバーのログインスクリプトの1つがstty...
を使用して端末の特性を設定しているためです。 ttyがない場合、つまりscp
に接続すると、コマンドは失敗します。
解決策は、stty
を保護して、インタラクティブセッションが存在する場合にのみ実行されるようにすることです。これを行う方法はいくつかあります。 bash/shタイプのシェルの例を次に示します。
醜い:
stty ... >/dev/null 2>&1
私のために働く:
test -n "$PS1" && stty ...
推奨 SEの他の場所 :
# Check for a bash login Shell
case $- in
*i*) stty ... ;;
esac
OSX sshd実装で問題になるかどうかはわかりませんが、システムによっては、ttyがない場合、〜/規則を含む暗黙のホームディレクトリが拡張されず、予期しない結果が生じる場合があります。確かなことではありませんが、〜/構文ではなくフルパス名を試してください。
これは、.bash_profileを読み込もうとしたときに発生します。追加した
[-z "$ {PS1}"] && return;
上部でそれを修正しました