2012-04-19 8 views
6

fabricを使用して、私のアプリケーションをラックスペースサーバーにリモート展開します。自宅のコンピュータで同じOS(Ubuntu Server 10.04)を使用している仮想マシンでスクリプトを試したところ、すべてうまくいくようです。ファブリックを使用できません。put - サーバー構成は必要ですか?

奇妙なことに、すべてのputファブリックコマンドが実サーバで失敗します。その他のコマンド(runcdsudoなど)は正常に動作しているようです。

これは、この特定のサーバーをターゲットとする場合、これは私が実行コマンドで行われます

fab test --host remote-server 

remote-serverは私の.ssh/configの別名です。マイfabfile:

@task 
def test(): 
    sudo("echo testing") 
    put("/tmp/file.txt", "/tmp/") 

tmp/test_file.txtが、私は私のテスト

これは出力

[remote-server] Executing task 'test' 
[remote-server] sudo: echo testing 
[remote-server] out: testing 

Traceback (most recent call last): 
    File "/home/user/env/lib/python2.6/site-packages/fabric/main.py", line 712, in main 
    *args, **kwargs 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 298, in execute 
    multiprocessing 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 197, in _execute 
    return task.run(*args, **kwargs) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 112, in run 
    return self.wrapped(*args, **kwargs) 
    File "/home/user/project/fabfile/__init__.py", line 33, in test 
    put("/tmp/file.txt", "/tmp/") 
    File "/home/user/env/lib/python2.6/site-packages/fabric/network.py", line 457, in host_prompting_wrapper 
    return func(*args, **kwargs) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/operations.py", line 338, in put 
    ftp = SFTP(env.host_string) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/sftp.py", line 20, in __init__ 
    self.ftp = connections[host_string].open_sftp() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/client.py", line 399, in open_sftp 
    return self._transport.open_sftp_client() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/transport.py", line 844, in open_sftp_client 
    return SFTPClient.from_transport(self) 
    File "/home/user/env/lib/python2.6/site-packages/ssh/sftp_client.py", line 105, in from_transport 
    chan.invoke_subsystem('sftp') 
    File "/home/user/env/lib/python2.6/site-packages/ssh/channel.py", line 240, in invoke_subsystem 
    self._wait_for_event() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/channel.py", line 1114, in _wait_for_event 
    raise e 
ssh.SSHException: Channel closed. 
Disconnecting from [email protected] done. 

であるために使用しているだけのテキストファイルです、私はリモートサーバー上で設定するために必要なものはありますputを使用してファイルを送信できますか?

+1

ファブリックはSSHを使用します。 'put'では' scp'や 'sftp'を使うかもしれません。最初に手動でファイルをアップロードするには 'scp'を使い、環境がうまく動作することを確認してください。 – Drake

+0

'scp'が動作し、' sftp'は動作しません。私はサーバ上で 'sftp'を有効にする方法を探します。ありがとう! これはサーバーにsftpしようとすると出力されます。 'サブシステム要求はチャネル0で失敗しました。 パケットを読み取れませんでした:ピアによって接続がリセットされました。 ' –

+0

@Drake:ファブリックを使用する方法はありますかSFTP? – lpapp

答えて

8

@Drakeのおかげで、リモートマシン上のsftpサーバーに問題があることがわかりました。このためにテストする

$ sftp remote-server 
subsystem request failed on channel 0 
Couldn't read packet: Connection reset by peer 

私はsftpを有効にするために、私は/etc/ssh/sshd_configと再起動(/etc/init.d/ssh restart)SSHサービスへのライン

Subsystem sftp /usr/lib/openssh/sftp-server 

を追加するために必要なことを読みました。しかし、ラインはすでにそこにあったし、それは動作していませんでした。

はその後、http://forums.debian.net/viewtopic.php?f=5&t=42818を読んだ後、私は

Subsystem sftp internal-sftp 

ために、その行を変更しsshサービスを再起動し、そしてそれが今取り組んでいる:

$ sftp remote-server 
Connected to remote-server 
sftp> 
+0

私はあなたの返信から、マシン上でパッケージをアップグレードまたはインストールするときに常にそのファイルを変更することができるかどうかについての説明を忘れています。私は、その設定がデフォルトではない理由が必要であり、それはサーバー設定を安全に変更するために知っておく必要があると思います。 – lpapp

+0

これは私にとってそれを行いました。 Paramiko/FabricのChannel Closed問題を解決したソリューションのみ。ありがとうございました! – Bartek

3

私は同じ問題がありました。 sftpが自分のサーバーにインストールされていないことが判明しました。 私はopensshをインストールし、sshdサービスを再起動しました。

yum -y install openssh 
service sshd restart 

また同じ問題がありました。 システムログ/ var/log/messagesを確認しました。私は

Jul 3 04:23:20 <ip> sshd[13996]: subsystem request for sftp 
Jul 3 04:23:20 <ip> sshd[13996]: error: subsystem: cannot stat /usr/libexec/sftp- server: No such file or directory 
Jul 3 04:23:20 <ip> sshd[13996]: subsystem request for sftp failed, subsystem not found 

が、私は「は/ usr/libexecに/ SFTPサーバ」の場所 を見ていた「は/ usr/libexecに/のopenssh/SFTPサーバ」およびスクリプトにあった私のSFTPサーバの場所を見つけ、次のエラーを検出しました私はシンボリックリンクを作成し、私の問題は解決しました。

[email protected]<ip> fabric]# locate sftp-server 
/usr/libexec/openssh/sftp-server 
/usr/share/man/man8/sftp-server.8.gz 

ln -s /usr/libexec/openssh/sftp-server /usr/libexec/sftp-server 
+0

ls -ld/usr/lib/sftp-server lrwxrwxrwx 1 root root 19 Oct 25 18:04/usr/lib/sftp-server - > openssh/sftp-server =>これは私のUbuntu 12.04のデフォルト設定です。私はこの答えが最近有用かどうか分からない。明確にしていただけますか? – lpapp

関連する問題