<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技術的なメモ書き &#187; ssh</title>
	<atom:link href="https://blog.sog-office.jp/?cat=4&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://blog.sog-office.jp</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Sun, 21 Mar 2021 08:49:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>ポートフォワード（sshトンネル）でphpからMYSQLに接続したい。</title>
		<link>https://blog.sog-office.jp/?p=107</link>
		<comments>https://blog.sog-office.jp/?p=107#comments</comments>
		<pubDate>Thu, 15 Oct 2015 13:04:59 +0000</pubDate>
		<dc:creator><![CDATA[中の人]]></dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.sog-office.jp/?p=107</guid>
		<description><![CDATA[ポートフォワードについてお勉強したのでメモ書きです。 &#160; 上記画像のような構成で、ローカルの開発環境 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>ポートフォワードについてお勉強したのでメモ書きです。</p>
<p>&nbsp;</p>
<ul>
<li>上記画像のような構成で、ローカルの開発環境から、稼働環境のdb（MYSQL）に接続したい。</li>
<li>dbはインターネットに公開されていない。</li>
</ul>
<p>というような条件だったので、リモートのwebサーバ経由のポートフォワードで接続しました。</p>
<p>&nbsp;</p>
<h3>無理だった例</h3>
<p>できればアプリケーションレベルで解決したかったので、php内で試行錯誤してみた。</p>
<pre class="">$ssh_connection = ssh2_connect($ssh_host, $ssh_port);
ssh2_auth_password( $ssh_connection, $ssh_user, $ssh_pass);
$tunnel = ssh2_tunnel($ssh_connection, $db_host, 3306);
$connection = mysql_connect($tunnel, $username, $password);
</pre>
<p>トンネルの確立まではできたけど、無理でした。</p>
<p>mysql_connect()はトンネルを受け付けないらしい。</p>
<p>また</p>
<pre class="">$host = "ssh2.tunnel://user:pass@xx.xx.xx.1:22/xx.xx.xx.2:3306";
$connection = mysql_connect($host, $username, $password);</pre>
<p>このようにssh2ラッパーを使う方法もダメでした。</p>
<p>&nbsp;</p>
<p>mysqliはトンネルをサポートしているらしいが</p>
<pre class="">$connection = new mysqli("{$db_host}:3306", $username, $password, $database, $tunnel);
</pre>
<p>今回のアプリケーションは古いコードで、dbとの接続にmysql_connect()を使用しており、この方法は使えない。</p>
<p>同様に、pdoもつかえない。</p>
<p>というわけで、アプリケーションレベルでの対応を諦める。</p>
<p>&nbsp;</p>
<h3>解決</h3>
<p>sshコマンドをバックグラウンドで走らせておくことで解決させました。</p>
<pre class="">ssh -f -g -N -C -L {ローカルポート}:{リモートdbホスト}:3306 {sshユーザ}@{リモートsshホスト} -p 22</pre>
<ul>
<li>-g  他のマシンからも 利用する</li>
<li>-f このポートフォワーディングをバックグラウンドで実行する。</li>
<li>-N SSHトンネリングのみに使用する。</li>
<li>-C データを圧縮して送る。</li>
<li>-L ポートフォワードを利用する。</li>
</ul>
<p>{ローカルポート} はローカルで空いてるポートだったらなんでもOK。</p>
<p>今回のサーバ構成例だとこんな感じ。</p>
<pre class="">ssh -f -g -N -C -L 13306:xx.xx.xx.2:3306 user@xx.xx.xx.1 -p 22</pre>
<p>これでローカルに対して接続したら、トンネルくぐって接続してくれます。</p>
<pre class="">$connection = mysql_connect("127.0.0.1:13306", $db_username, $db_password);</pre>
<p>もちろんPDOだろうがなんだろうが、接続できます。</p>
<p>&nbsp;</p>
<p>ちなみに、phpのexec()で、sshコマンドを打ってみたが、なんかうまくいかなかった。</p>
<p>まぁ作業前にコマンド一本打つか、/etc/rc.d/rc.localにコマンド書いとくかすればいいかな。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>参考にさせてもらったサイトはこちら</p>
<p><a href="http://www.tamurasouko.com/?p=1092" target="_blank">http://www.tamurasouko.com/?p=1092</a></p>
<p><a href="https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html" target="_blank">https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sog-office.jp/?feed=rss2&#038;p=107</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EC2のcentos7インスタンスでのユーザ追加で、Windowsからsshの鍵認証ができない</title>
		<link>https://blog.sog-office.jp/?p=11</link>
		<comments>https://blog.sog-office.jp/?p=11#comments</comments>
		<pubDate>Sat, 04 Jul 2015 12:05:23 +0000</pubDate>
		<dc:creator><![CDATA[中の人]]></dc:creator>
				<category><![CDATA[centos7]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.sog-office.jp/?p=11</guid>
		<description><![CDATA[最近は安定した環境でばかり開発をしていたので、色々新しい環境を試したい今日このごろ。 EC2で色々やってみたい [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>最近は安定した環境でばかり開発をしていたので、色々新しい環境を試したい今日このごろ。</p>
<p>EC2で色々やってみたいと思い遅ればせながら導入してみた。</p>
<p>&nbsp;</p>
<p>まずsshの鍵認証。</p>
<p>キーペア作成時に保存を促されるpemファイルからのログインだけど、これは問題ない。</p>
<p>さすがにこのくらいじゃ詰まらない。</p>
<p>&nbsp;</p>
<p>何に引っかかったかというと、タイトルのとおりでもあるが、</p>
<p><strong>ユーザを追加した際、鍵を手動で作成しても有効にならない！</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>パスワード認証にしようとも思ったが、<br />
/etc/ssh/sshd_config<br />
で<br />
PasswordAuthentication yes<br />
としても、有効にならない。なんでーー？<br />
EC2の仕様なのか、centos7の仕様なのかわからないが、パスワード認証はあきらめ、<br />
どうせなら鍵認証の方向で解決方法を模索した。<br />
というわけで参考にした記事</p>
<p><em><a href="http://qiita.com/dahugani/items/e1fc5c212bf6a7365f8f" target="_blank">引用元 http://qiita.com/dahugani/items/e1fc5c212bf6a7365f8f</a></em></p>
<p>まぁほぼ丸コピだけど、少しアレンジ</p>
<p>コマンドは当該のユーザ（この例だとnewuser）で行います。</p>
<pre class="">cd /home/newuser
mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen -t rsa
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
cat id_rsa</pre>
<p>こんな感じで、鍵を作成し、表示された id_rsaの中身（秘密鍵）を、ローカルのテキストエディタにでも貼っつけて保存。</p>
<p><strong>ポイントは、ファイル名を公開鍵のファイル名を authorized_keys にすること。</strong></p>
<p>これがわかんなくて何時間も詰まってました。</p>
<p>以前使ってたサーバーでは、公開鍵のファイル名はなんでもよかったんだけどなあ。</p>
<p>sshd_configにバッチリ 『AuthorizedKeysFile .ssh/authorized_keys』 って書いてありました。</p>
<p>&nbsp;</p>
<p>なおローカルに保存したファイルは、後々使うこともあるので、管理しやすいファイル名にしときましょう。</p>
<p>&nbsp;</p>
<p><a href="http://blog.sog-office.jp/wp-content/uploads/2015/07/スクリーンショット-2015-07-04-18.564.png"><img class="alignnone size-medium wp-image-23" src="http://blog.sog-office.jp/wp-content/uploads/2015/07/スクリーンショット-2015-07-04-18.564-300x250.png" alt="スクリーンショット-2015-07-04-18.56" width="300" height="250" /></a></p>
<p>んで、このファイルを  PuTTy Key Generator （puttygen.exe） でインポート</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://blog.sog-office.jp/wp-content/uploads/2015/07/faeijoffafa3.png"><img class="alignnone size-medium wp-image-24" src="http://blog.sog-office.jp/wp-content/uploads/2015/07/faeijoffafa3-300x248.png" alt="faeijoffafa3" width="300" height="248" /></a></p>
<p>Key_commentにわかりやすいコメントつけておいたほうが、後でわかりやすいです。</p>
<p>そんで Save private key で秘密鍵を作成します。</p>
<p>作成した秘密鍵を Pageantに登録しておわり。</p>
<p>&nbsp;</p>
<p>teratermや、filezillaで接続できるか試してみましょう。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>また、ユーザごとに鍵を分ける必要がなければ、<br />
初期ユーザ（今回のケースだとcentos）の鍵がそのままつかえるので</p>
<p>ルート権限で下記のように</p>
<pre>cd /home/newuser
cp -rp /home/centos/.ssh ./
chown -R newuser:newuser .ssh
</pre>
<p>こっちのほうが、ローカル側での設定がなにも要らないので<br />
（sshログインできているということは、初期ユーザでの鍵設定が完了している）、</p>
<p>すごく簡単に完了します。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sog-office.jp/?feed=rss2&#038;p=11</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
