喫茶XRAYトップページ

[スレッド全体
]

[11915] Re:SSH 公開鍵認証返信 削除
2018/6/6 (水) 22:12:37 taka
▼ SOさん
> こんにちは。
>
> 早速ですが、さくらインターネット< https://www.sakura.ad.jp/ >のsshサーバーに、
> Tera Termで公開鍵認証を行っています。
>
> Tera Termの手動による操作及び、手動によるTera Termマクロの認証は動作しているのですが、
> タスクスケジューラ(ログインしているかどうかにかかわらす実行する)にて動作しません。
>
> ぐぐって調べると、
> http://www.illinternet.com/2017/11/05/teraterm%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%A7%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E3%80%82/
> 等にて、ユーザーがログオンしているかどうかにかかわらず実行する」を選択すると、バッチが動作しないと書かれています。
>
> 別の方法でも構いませんので、なにかご存知の方おられましたら、
> 教えてください。


Tera Termの問題でしたら
ターミナルをPuttyに変更して試してみてはどうですか?

Tera Termより
Puttyのほうがユーザーが多いので自動化とかたくさんヒットしますよ。
 Putty 公開鍵認証 自動化
 Putty ポートフォワーディング


[11917] Re2:SSH 公開鍵認証返信 削除
2018/6/7 (木) 09:49:54 SO
▼ takaさん

情報、ありがとうおございます(^^

今は、Tera Termにてログインしっぱなしで、
データ同期のみバッチファイルにて動かしている状況です。

。。。Tera Termにてログインしっぱなしが気持ち悪いので、
Puttyを調べてみたいと思います。

[11919] Re3:SSH 公開鍵認証返信 削除
2018/6/7 (木) 22:34:56 taka
▼ SOさん
> ▼ takaさん
>
> 情報、ありがとうおございます(^^
>
> 今は、Tera Termにてログインしっぱなしで、
> データ同期のみバッチファイルにて動かしている状況です。
>
> 。。。Tera Termにてログインしっぱなしが気持ち悪いので、
> Puttyを調べてみたいと思います。

PuTTYでテストしてみました。
結果として、Tera Termと同じ現象です。

ログインしていないとトンネリングできないみたいです。

試しにトンネリングだけタスクスケジュールにいれて実行すると
タスクの一覧にきちんとプログラムが表示されていますが

mysqladmin ping -h localhost -P 3307 -u test
と打つとエラーが返ってきます

ログイン中でないと新しいポートの割り当てができない仕様なのかもしれないです。
トンネル接続が特殊なのかもしれないので、ポート開けるだけのプログラムで実験してみないとわかりません。

powershellを使えば
 Start-Process
 timeout
 Start-Process -Wait
 Stop-Process
を組み合わせると閉じるところまで自動化できます

# タスクの設定: プログラム/スクリプト
#   %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
# 引数の追加(オプション)
#   -ExecutionPolicy RemoteSigned -File c:\tmp\test_task.ps1

putty="C:\pathto\PuTTYPortable\App\putty\putty.exe"
$remote_user="user"
$remote_pass="pass"
$remote_host="hostname"

try{
  # プロセスを実行+未待機
  $process = Start-Process "$putty" -ArgumentList "-ssh -L 3307:127.0.0.1:3306 $remote_user@$remote_host -pw $remote_pass -N" -PassThru

  # 指定秒数待機する(接続したであろう時間適当に待つ)
  timeout 10

  # 何か実行する
  # Start-Process  ... -Wait
} finally {
  # 起動したPUTTYを強制的にシャットダウン
  Stop-Process -InputObject $process
}


[11920] Re4:SSH 公開鍵認証返信 削除
2018/6/8 (金) 13:39:37 taka
以下のコードをコンパイル登録して

rocedure TForm1.FormCreate(Sender: TObject);
begin
  IdHTTPServer1.Active := True;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  IdHTTPServer1.Active := False;
end;

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := 'Hello';
end;

タスクスケジュールの未ログインに
Indyでポート80を開けて
別のユーザーでhttp://localhost/が閲覧できるのでポートの割り当てができないというわけではないようです。

そこで cygwinをインストールしてあるのを思い出したので
cygwinのsshで keyを設定して
タスクに登録して ポートフォワーディングをすると 未ログイン状態でつながりました。
 ※ runas /profile /user:ユーザー名 "C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -"
 で ログインしてcygwin用のプロファイルを作成し、sshの設定を事前にしておく

C:\cygwin\bin\ssh.exe -L 3307:127.0.0.1:3306 ユーザー@ホスト -N


Tera TermやPuTTYはなんか触っちゃいけないとこにアクセスしているようです。


cygwinをインストーしていない場合はとてつもないファイルのごみが増えて
セキュリティソフトの検索やデフラグなどに時間がかかるようになったりする弊害があるので
そのままインストールせずに
ディスク管理を開いて
ディスクのパーティションを1個を c:\cygwinに割り当てるなどしたほうがいいです。
 http://www.atmarkit.co.jp/ait/articles/0002/05/news001.html
うちは5GBほど割り当ててます。
・ドライブ文字は割り当てない
・c:\cygwinに割り当て


Win32-OpenSSHはunixのパクリらしいので
powershellのsshでも動くかもしれません。



[11921] Re4:SSH 公開鍵認証返信 削除
2018/6/8 (金) 14:20:54 taka
Win32-OpenSSH
でもタスク未ログインで接続できるようです
ただし、動作が遅いようで接続完了するまでに時間がかかるようです。

事前に、一度 スケジュールするユーザーで
ssh.exe ユーザー@ホスト
で認証を完了させておく必要があります。

# タスクの設定: プログラム/スクリプト
#   %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
# 引数の追加(オプション)
#   -ExecutionPolicy RemoteSigned -File c:\tmp\test_task_ssh.ps1

$ssh="C:\tmp\OpenSSH-Win32\ssh.exe"
$ssh_args="-L 3307:127.0.0.1:3306 ユーザー@ホスト -N"

# プロセスを実行+未待機
Start-Process "$ssh" -ArgumentList "$ssh_args" -RedirectStandardError "C:\tmp\test_task_ssh.ps1.err.log"


[11923] Re2:SSH 公開鍵認証返信 削除
2018/6/8 (金) 20:48:11 taka
# 自動化サンプル2 : powershell + ssh

# タスクの設定: プログラム/スクリプト
#   %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
# 引数の追加(オプション)
#   -ExecutionPolicy RemoteSigned -File c:\tmp\test_task2.ps1

# コマンドパスに空白がある場合は先頭に & をつける &"パ ス"

## 設定 ssh
$remote_user="ユーザー名"
$remote_host="ホスト名"

## mysql
$mysql_user="DBユーザー名"
$mysql_pass="DBパスワード"
$mysql_server_hostname="127.0.0.1" # 同一サーバーなら通常 127.0.0.1、違う場合はDBのホスト名
$mysql_server_port="3306"  # 通常 3306
$mysql_local_port="3307"   # ローカル 任意のポート番号

$mysql_exe="C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe"
$mysqladmin_exe="C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin.exe"

# コマンド引数へ渡すとき 1次元変数は 1個で処理されてしまうので配列にいれる
$mysql_common_args_array=@("-P","$mysql_local_port")
if ($mysql_user -ne "") { $mysql_common_args_array += @("-u", "$mysql_user") }
if ($mysql_pass -ne "") { $mysql_common_args_array += @("-p", "$mysql_pass") }

## my_cmd
$mysql_test_sql="`"INSERT INTO table_date VALUES(CURRENT_TIMESTAMP);`""
$my_cmd="$mysql_exe"
$my_cmd_args="-s $mysql_common_args_array -D test -e $mysql_test_sql"
# [String]::Join(" ",$mysql_common_args_array) をしなくても勝手に連結されるみたい

$ssh="ssh"
$ssh_args="-L ${mysql_local_port}:${mysql_server_hostname}:${mysql_server_port} ${remote_user}@${remote_host} -N"


try {
  # プロセスを実行+未待機
  $process = Start-Process "$ssh" -ArgumentList "$ssh_args" -PassThru
#  [Console]::WriteLine("{0}", "$ssh $ssh_args")

  # powershellのsshは遅い
  # 指定秒数待機する
  timeout 8

  $connected=$FALSE
  # 接続できているか確認する(2秒x10回試行する)
  for ($i=0; $i -lt 10; $i++) {
    &"$mysqladmin_exe"  ping $mysql_common_args_array
    if ($?) {
      $connected=$TRUE
      break
    }
    timeout 2
  }

  # 接続できていればコマンドを実行する
  if ($connected) {
    # プロセスを実行+待機
    ## ここで何かする
    Start-Process "$my_cmd" -ArgumentList "$my_cmd_args" -Wait
  }

} finally {
  # 起動したSSHを強制的にシャットダウン
  if ($process.SI -ne $NULL -Or $process.ProcessName -ne $NULL) {
    [Console]::WriteLine("Stop {0}", $process.ProcessName)
    Stop-Process -InputObject $process
  }

  # 保護しているが万が一残ってしまって
  # 生き残りをすべて抹消するには手動で以下のコマンド
  # Stop-Process -name SSH

}

##
# テスト用のテーブルを作成
# CREATE TABLE table_date (`create_at` datetime NOT NULL);
##
# テスト用のテーブルを表示
# SELECT * FROM table_date;
##
# テスト用のテーブルをクリア
# DELETE FROM table_date;
##


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82