質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1224閲覧

django: シェルスクリプトのssh接続でリモートのcdに失敗する

machid

総合スコア19

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/26 08:05

お世話になります。
windows10環境でdjango開発しています。
PythonAnywhereにデプロイしています。

解決したいこと

シェルスクリプトでssh接続し、リモートのPythonファイルを実行したいです。

以下のコマンドを実行していますが2つ目のcdで失敗します。

ssh -o StrictHostKeyChecking=no user@ssh.pythonanywhere.com cd user.pythonanywhere.com ssh -o StrictHostKeyChecking=no user@ssh.pythonanywhere.com cd app

以下エラー文です。

bash: line 0: cd: app: No such file or directory

リモート側のbashでdirコマンドを打つと確かにappフォルダはあります。

なぜエラーが出るのでしょうか。お知恵をお貸しください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/03/26 08:07

リモート側のbashでdirコマンドを打った結果を提示しましょう
guest

回答3

0

ベストアンサー

cdの結果はsshが終了すると忘れられます。

一回のsshコマンドで実行しましょう。

sh

1ssh ~~ sh -c ’"cd ~~; cd ~~; コマンド1; コマンド2"'

#追記
誤っていたので、引用符をさらに追加しました。

投稿2019/03/26 08:10

編集2019/03/27 01:55
otn

総合スコア84542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

machid

2019/03/26 09:29

ご回答ありがとうございます。 ssh -o StrictHostKeyChecking=no user@ssh.pythonanywhere.com cd user.pythonanywhere.com; cd app; python hello.py このように書いてみました。 下のエラーが出ます。 null): can't open file 'hello.py': [Errno 2] No such file or directory コマンドが正しく実行されていればhello.pyがあるはずなのですが何が違うのでしょうか。
otn

2019/03/26 12:41 編集

何故私の書いた通りにしないのでしょうか? cd ~~;cd ~~; コマンド じゃなくて、 sh -c "cd ~~;cd ~~; コマンド" です。
machid

2019/03/27 01:07

すみません、勘違いをしておりました。 ssh -o StrictHostKeyChecking=no oioiman@ssh.xxx.com sh -c "cd xxx.pythonanywhere.com; cd app; python hello.py" &> file とやってみたのですが python: can't open file 'hello.py': [Errno 2] No such file or directory エラーが出ます。 cd xxx.pythonanywhere.comとしたときにディレクトリが変わってないように思うのですがまだなにか勘違いしているのでしょうか。
otn

2019/03/27 01:21 編集

すいません。私がミスをしていました。<(_ _)> sh -c '"cd ~~;cd ~~; コマンド"' もしくは 'sh -c "cd ~~;cd ~~; コマンド"' と、さらに別の引用符で囲ってください。
machid

2019/03/27 01:42

無事ディレクトリ移動できました。ご丁寧にお答えいただいて本当にありがとうございました。
guest

0

SSHでコマンドを実行した場合、コマンドごとにプロセスが生成されますので、cdコマンドの有効範囲は1回の実行の中に限られます。

次の接続は、前のcdとは無関係に、1回目と同じディレクトリからスタートします(つまり、cdコマンドだけをSSHで実行しても、ほとんど無意味です)。

投稿2019/03/26 08:13

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

machid

2019/03/26 09:30

ご回答ありがとうございます。 わかりやすいご説明ありがとうございます。
guest

0

一度ログアウトしてログインし直すと 再度ホームディレクトリにログインしたところから始まります。

リモートログインして、複数のコマンドを実行するのであれば、

  • 実行するコマンドをリモートサーバーであらかじめシェルスクリプトにしておいて、実行する
  • expect を使う

あたりでしょうか。

参考
対話型のコマンドを自動化できるexpectコマンド
expectコマンドを使って,sshコマンド及びお決まりのログイン後コマンドを実行

投稿2019/03/26 08:12

編集2019/03/26 08:13
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

machid

2019/03/26 09:33

次はあらかじめシェルスクリプトにしておくやりかたでやってみます。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問