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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SSH

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

Python

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

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

Q&A

2回答

2801閲覧

Fabric.apiを用いたSSH接続の際、ホスト名の再入力を求められる

rikumaru

総合スコア14

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SSH

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

Python

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

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

0グッド

1クリップ

投稿2017/03/06 10:03

編集2017/03/07 01:11

###前提・実現したいこと
初めての質問なので、情報に不備がありましたら面目ありません。
会社のWindows7環境下で、Python(3)のfabricライブラリを用いて社内サーバ(centOS)にsshによる遠隔でコマンドを渡すプログラムを書いています。
記載したソースコードで、まずはhostnameを表示させる簡単なプログラムを試すつもりが、run実行時、以下のように指定したホストに対して「そんなホストないよ!」って怒られてしまいます。
そのあと求められる再入力でインプットすれば、普通に正常稼働します。

###発生している問題・エラーメッセージ

実行時、以下のような警告文が出現し、そのあと普通にホストアドレスをインプットすれば正常稼働する。 No hosts found. Please specify (single) host string for connection:

###該当のソースコード

Python

1#coding:utf-8 2 3from fabric.api import run 4from fabric.api import env 5 6host1 = '123.45.67.89' 7 8env.hosts = [host1] 9env.user = "user" 10env.password = "pass" 11 12def testfun(): 13 run("hostname") 14 15testfun()

###試したこと
求められている型はstringでよかったはず(どのサンプルコードを見てもこんなところで躓いているケースがない)なので、どこを見直してよいのやら途方に暮れている状態です。
再入力後に普通に動作することを考えれば、userとpassはstring型で普通に受け取ってもらえていると思います。
(誤ったpassなどを与えれば再入力を求められるので、userとpassに関してはstring型で正常にインプットを受け取ってもらえているという感じです)

※3/7追記※
なお、直接env.hosts = ["123.45.67.89"]としても結果は変わりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Pleades環境下で作業をしています。
Pythonのバージョンは3.5.1です。

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

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

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

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

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

nagaetty

2017/03/06 13:13

env.hosts = ["123.45.67.89"] でも同じ結果になりますか?
guest

回答2

0

単にPythonファイル内ではリストで渡しているせいではないでしょうか?
エラーメッセージでも「接続には(単一の)ホスト文字列を指定してください。」とでています。

投稿2017/03/06 17:25

kashew_nuts

総合スコア163

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

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

rikumaru

2017/03/07 01:07

ご回答ありがとうございます。 http://fabric-ja.readthedocs.io/ja/latest/tutorial.html#defining-connections fabricチュートリアル内では、env.hostsはリストオブジェクトとして用いるよう指定されており、appendなどのメソッドを使うことができます。 試しにenv.hosts = "123.45.67.89"のように単なるstringとしてオーバーライドしてみましたが改善されませんでした。 このエラー文は意訳としては単一でなければならないというより、とりあえず一つ修正してみて、という意味なのだと解釈しています。
kashew_nuts

2017/03/07 01:49 編集

すみません。読み間違えていました。 最後の`testfun()`の行が不要だと思います。 この行を削除して、`fab testrun()`と起動したら動きませんか?
guest

0

関連してるか、自身がないのですが、Pythonの文字列記述の推奨は下記のようです。

・Double quotes for text (文字列にはダブルクォート)
・Single quotes for anything that behaves like an identifier
(識別子的なものはシングルクォート)
・Double quoted raw string literals for regexps
(正規表現のraw文字列はダブルクォート)
・Tripled double quotes for docstrings
(docstringは3連ダブルクォート)

投稿2017/03/06 13:19

nagaetty

総合スコア1106

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

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

rikumaru

2017/03/07 01:09

ご回答ありがとうございます。 推奨通りの指定で文字列記述してみましたが、やはり変わらずでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問