<?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>schmichael&#039;s blog &#187; ssh</title>
	<atom:link href="http://blog.schmichael.com/tag/ssh/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schmichael.com</link>
	<description>good good study, day day up</description>
	<lastBuildDate>Sat, 05 Nov 2011 23:13:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Bazaar: DVCS for Dummies</title>
		<link>http://blog.schmichael.com/2009/02/26/bazaar-dvcs-for-dummies/</link>
		<comments>http://blog.schmichael.com/2009/02/26/bazaar-dvcs-for-dummies/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 17:53:04 +0000</pubDate>
		<dc:creator>Michael Schurter</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://michael.susens-schurter.com/blog/?p=548</guid>
		<description><![CDATA[I like Bazaar (bzr). It doesn&#8217;t make me popular in the Mercurial-centric Pythonosphere. It doesn&#8217;t make me a 1337 über hacker like git would. However, it does meet the most important criteria: It just works for me. Now for the &#8230; <a href="http://blog.schmichael.com/2009/02/26/bazaar-dvcs-for-dummies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I like <a href="http://bazaar-vcs.org/">Bazaar (bzr)</a>.  It doesn&#8217;t make me popular in the <a href="http://www.selenic.com/mercurial/">Mercurial</a>-centric Pythonosphere.  It doesn&#8217;t make me a 1337 über hacker like <a href="http://whygitisbetterthanx.com/">git</a> would.</p>
<p>However, it does meet the most important criteria: <strong>It just works</strong> <em>for me</em>.</p>
<p>Now for the big disclaimer: Most of the projects I use bzr to manage fall into 1 of 2 categories:</p>
<ol>
<li>Projects with small teams (1-4 developers)</li>
<li>Public projects where I just want to grab the source and maybe maintain some local patches</li>
</ol>
<p>If I needed to somehow manage a project with dozens or hundreds of contributors (like Gnome or the Linux Kernel), git would probably look a lot more appealing to me.  After all, it was designed for large code bases with lots of contributors and branches.</p>
<p>I&#8217;ve seen lots of <a href="http://www.nardol.org/2009/2/19/git-basics-reversing-the-git-sucks-effect">git cookbooks popping up lately</a>, so I thought I&#8217;d explain my bzr workflow for the 2 use cases I list above.</p>
<p><b>1. Starting and sharing a project with a small team</b><br />
Prerequisite: You&#8217;ve created a directory with some code in it.</p>
<ol>
<li>Turn your source code directory into a bzr repository:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>foo$ bzr init</pre></div></div>

</li>
<li>Add you source files:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>foo$ bzr add</pre></div></div>

</li>
<li>Commit:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>foo$ bzr ci</pre></div></div>

</li>
<li>Push my changes to a remote location* other team members can access:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>foo$ bzr push <span style="color: #660033;">--remember</span> sftp:<span style="color: #000000; font-weight: bold;">//</span>some<span style="color: #000000; font-weight: bold;">/</span>file<span style="color: #000000; font-weight: bold;">/</span>server</pre></div></div>

</li>
</ol>
<p>Done!  My favorite part is that besides the <code>--remember</code> option, bzr just does what you expect without any flags or configuring.  The <code>--remember</code> option simply tells bzr to use that location for future <code>push</code> commands (so you can drop all the typing after &#8220;push&#8221;).</p>
<p>For more information check out the <a href="http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html#sharing-with-peers">excellent bazaar documentation on sharing code</a>.</p>
<p><b>2. Getting the code for an open source project</b></p>
<p>Unfortunately most big bzr-hosted projects are on Launchpad which makes for a pretty boring demonstration:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src$ bzr branch <span style="color: #c20cb9; font-weight: bold;">lp</span>:terminator <span style="color: #666666; font-style: italic;"># yawn</span></pre></div></div>

<p>To make matters worse, non-Launchpad hosted projects are nearly as dull:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src$ bzr branch http:<span style="color: #000000; font-weight: bold;">//</span>bzr.savannah.gnu.org<span style="color: #000000; font-weight: bold;">/</span>r<span style="color: #000000; font-weight: bold;">/</span>gnash<span style="color: #000000; font-weight: bold;">/</span>trunk</pre></div></div>

<p>In each case bzr will create a new directory for you using the last part of the source path (terminator &#038; trunk respectively).  You can optionally give it a second argument to put the branch in a different location.  The destination can even be a remote server!</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>src$ bzr branch http:<span style="color: #000000; font-weight: bold;">//</span>source<span style="color: #000000; font-weight: bold;">/</span>branch sftp:<span style="color: #000000; font-weight: bold;">//</span>destination<span style="color: #000000; font-weight: bold;">/</span>branch</pre></div></div>

<p>Ok now I&#8217;m just showing off.  I&#8217;ve never found a use for that feature.  <img src='http://blog.schmichael.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   However, I do appreciate that a location is a location to bzr regardless of whether that location is the local filesystem or a remote server.  It just works how you&#8217;d expect it.</p>
<p><a href="http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html">Chapters 4-6 of Bazaar&#8217;s documentation</a> give some excellent examples of various collaboration workflows.</p>
<p><strong><em>Bonus Feature:</em> Subversion mode!</strong></p>
<p>So its not really <em>Subversion mode</em>, but bzr does support pulling repositories via the <code>checkout</code> command and updating your working copy from the remote repository via the <code>update</code> command just like Subversion.  As you would expect, the <code>commit</code> now sends changes directly to the remote server.</p>
<p>While I&#8217;ve used this feature mainly to make transitioning to bzr easier for Subversion users, <a href="http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html#using-checkouts">Bazaar&#8217;s documentation has some excellent techniques for making advanced workflows easier using checkouts</a>.</p>
<hr/>
* SSH Tips: </p>
<ul>
<li>bzr+ssh is faster than plain old sftp but requires bzr to be installed on the server.</li>
<li>Setup ssh connection multiplexing using <code>ControlMaster</code> in <code>~/.ssh/config</code> and leave an ssh session active to speed up bzr operations.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.schmichael.com/2009/02/26/bazaar-dvcs-for-dummies/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Summer of Hacks</title>
		<link>http://blog.schmichael.com/2008/05/13/summer-of-hacks/</link>
		<comments>http://blog.schmichael.com/2008/05/13/summer-of-hacks/#comments</comments>
		<pubDate>Tue, 13 May 2008 14:22:15 +0000</pubDate>
		<dc:creator>Michael Schurter</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[denyhosts]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[linode]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michael.susens-schurter.com/blog/?p=317</guid>
		<description><![CDATA[My Linode has been experiencing a huge number of brute force login attempts in the past week. I don&#8217;t keep detailed statistics, but I would guess there have been 300 attempts in the past week as opposed to the usual &#8230; <a href="http://blog.schmichael.com/2008/05/13/summer-of-hacks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My <a href="http://www.linode.com/">Linode</a> has been experiencing a huge number of brute force login attempts in the past week.  I don&#8217;t keep detailed statistics, but I would guess there have been <strong>300 attempts in the past week</strong> as opposed to <em>the usual rate of about 500 attempts over 200 days (2-3 attempts per day)</em>.</p>
<p><a href="http://denyhosts.sourceforge.net/">Denyhosts</a> has been doing its job perfectly.  It should be illegal to run a Internet exposed SSH server without it or a similar tool.*</p>
<p>Thanks to HoopyCat in #linode for pointing me to a <a href="http://isc.sans.org/diary.html?storyid=4408">SANS Internet Storm Center article explaining the <em>Summer of Hacks</em></a> phenomenon. </p>
<p><small>* Unless of course you only accept key based logins.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schmichael.com/2008/05/13/summer-of-hacks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easy Rsync Remote Backups Using SSH Keys</title>
		<link>http://blog.schmichael.com/2008/03/19/easy-rsync-remote-backups-using-ssh-keys/</link>
		<comments>http://blog.schmichael.com/2008/03/19/easy-rsync-remote-backups-using-ssh-keys/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 04:25:18 +0000</pubDate>
		<dc:creator>Michael Schurter</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[keys]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michael.susens-schurter.com/blog/2008/03/19/easy-rsync-remote-backups-using-ssh-keys/</guid>
		<description><![CDATA[Rsync is an excellent file transfer utility thats especially well suited for backing up files over the Internet because it only transfers the data that has changed. A friend asked me how to set it up, so I thought I&#8217;d &#8230; <a href="http://blog.schmichael.com/2008/03/19/easy-rsync-remote-backups-using-ssh-keys/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.samba.org/rsync/">Rsync</a> is an excellent file transfer utility thats especially well suited for backing up files over the Internet because it only transfers the data that has changed.  A friend asked me how to set it up, so I thought I&#8217;d post what I sent him here.</p>
<p><strong>Goal:</strong> Backup a directory from computer <code>Zim</code> to computer <code>Ark</code></p>
<p><strong>Details:</strong>  </p>
<ul>
<li>Both <code>Zim</code> and <code>Ark</code> are subdomains of <code>example.com</code></li>
<li>The user on <code>Ark</code> which receives the backup files is named <code>backupuser</code></li>
<li>The user on <code>Zim</code> with access to the files you want to backup is named <code>steve</code></li>
</ul>
<p><strong>Prerequisites:</strong></p>
<ul>
<li><a href="http://openssh.org/">ssh</a> installed on both hosts</li>
<li><a href="http://www.samba.org/rsync/download.html">rsync</a> installed on both hosts</li>
</ul>
<ol>
<li>Login to <code>Zim</code> via <code>ssh</code>:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> steve<span style="color: #000000; font-weight: bold;">@</span>zim.example.com</pre></div></div>

</li>
<li>Generate a <code>ssh</code> key pair using:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh-keygen</span> <span style="color: #660033;">-t</span> rsa
<span style="color: #000000; font-weight: bold;">&lt;</span>press enter when prompted where to save the key<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;</span>press enter twice when asked <span style="color: #000000; font-weight: bold;">for</span> a passphrase<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

</li>
<li>To use the key to login to <code>Ark</code> remotely without manually entering a password you need to copy the public key from <code>Zim</code> to <code>Ark</code> using:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ssh-copy-id <span style="color: #660033;">-i</span> .ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa.pub backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com</pre></div></div>

<p>If you don&#8217;t have <code>ssh-copy-id</code> on your system, get a new system.  <img src='http://blog.schmichael.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   If thats not possible you can download the script with:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-O</span> ssh-copy-id http:<span style="color: #000000; font-weight: bold;">//</span>cvsweb.mindrot.org<span style="color: #000000; font-weight: bold;">/</span>index.cgi<span style="color: #000000; font-weight: bold;">/</span>~checkout~<span style="color: #000000; font-weight: bold;">/</span>openssh<span style="color: #000000; font-weight: bold;">/</span>contrib<span style="color: #000000; font-weight: bold;">/</span>ssh-copy-id?<span style="color: #007800;">rev</span>=<span style="color: #000000;">1.6</span>;content-type=text<span style="color: #000000; font-weight: bold;">%</span>2Fplain <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> +x ssh-copy-id</pre></div></div>

<p>Then retry the above command only you&#8217;ll need to prepend a &#8220;./&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>ssh-copy-id <span style="color: #660033;">-i</span> .ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa.pub backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com</pre></div></div>

</li>
<li>Verify the key copied properly by attempting to login to <code>Ark</code>.  You should <em>not</em> be prompted for a password:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com</pre></div></div>

</li>
<li>Logout of <code>Ark</code>.  The key is setup, so you&#8217;re now ready to rsync files without having to manually enter a password.</li>
<li>Test rsync by choosing a small file to backup and using:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-tP</span> <span style="color: #000000; font-weight: bold;">/</span>some<span style="color: #000000; font-weight: bold;">/</span>small<span style="color: #000000; font-weight: bold;">/</span>testfile backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com:<span style="color: #000000; font-weight: bold;">/</span>tmp</pre></div></div>

<p>A nice little progress bar should be displayed as the file is transferred.  Confirm that &#8220;testfile&#8221; is now in <code>/tmp</code> on <code>Ark</code>.</li>
<li>You&#8217;re finally ready to do a real rsync like:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-t</span> <span style="color: #000000; font-weight: bold;">/</span>directory<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/*</span> backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com:<span style="color: #000000; font-weight: bold;">/</span>existing<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/</span>directory</pre></div></div>

<p><strong>Note:</strong> There are several useful options for rsync.  Check <code>man rsync</code> to find out more.</p>
<ul>
<li><code>-p</code> &#8212; preserve permissions (useful for backups, use -E if you only care about the executable bit)</li>
<li><code>-r</code> &#8212; recursively backup directories.</li>
<li><code>-z</code> &#8212; compressed uncompressed files</li>
<li>And just FYI: <code>-t</code> tells rsync to use the last modified timestamp to determine whether or not to transfer files.  It makes rsync a <em>lot</em> faster at determining whether or not files have changed.</li>
</ul>
</li>
<li>To schedule the backup to take place nightly at 1:13 AM edit your crontab using <code>crontab -e</code> and insert the following line:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">13</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> rsync <span style="color: #660033;">-qt</span> <span style="color: #000000; font-weight: bold;">/</span>directory<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/*</span> backupuser<span style="color: #000000; font-weight: bold;">@</span>ark.example.com:<span style="color: #000000; font-weight: bold;">/</span>existing<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/</span>directory</pre></div></div>

</li>
</ol>
<p><strong>Caveats:</strong></p>
<ul>
<li>These instructions will <em>push</em> files from <code>Zim</code> to <code>Ark</code>.  There&#8217;s no reason why <code>Ark</code> couldn&#8217;t <em>pull</em> files from <code>Zim</code>.  In fact, this is often <strong>more secure</strong> if <code>Zim</code> is a web server with a larger attack surface than <code>Ark</code>.  Mea culpa.</li>
<li>If the IP address of <code>Ark</code> is dynamic, use a service like <a href="http://www.dyndns.com">dyndns.com</a>.  Otherwise SSH will give you errors.</li>
<li><em>Major security warning:</em>  If someone breaks into <code>Zim</code>, they can also delete all of your backups on <code>Ark</code>.  Never ever ever use the <code>root</code> user for backups on <code>Ark</code>.  You can use the <code>root</code> user on <code>Zim</code> to send the backups, but its best to have a special backup user setup on <code>Ark</code> to receive the backup.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.schmichael.com/2008/03/19/easy-rsync-remote-backups-using-ssh-keys/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hostname Tab-Completion for OpenSSH</title>
		<link>http://blog.schmichael.com/2008/01/30/hostname-tab-completion-for-openssh/</link>
		<comments>http://blog.schmichael.com/2008/01/30/hostname-tab-completion-for-openssh/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 15:10:37 +0000</pubDate>
		<dc:creator>Michael Schurter</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[shortcuts]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://michael.susens-schurter.com/blog/2008/01/30/hostname-tab-completion-for-openssh/</guid>
		<description><![CDATA[I use OpenSSH daily. In fact the only app I probably use more is vim. However, until yesterday I was typing out the full username and hostname when using ssh: &#160;&#160;&#160;ssh username@ridiculouslylong.domain.com Ugh Using the same username makes life a &#8230; <a href="http://blog.schmichael.com/2008/01/30/hostname-tab-completion-for-openssh/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://openssh.org/">OpenSSH</a> daily.  In fact the only app I probably use more is <a href="http://www.vim.org/">vim</a>.  However, until yesterday I was typing out the full username and hostname when using ssh:</p>
<p><code>&nbsp;&nbsp;&nbsp;ssh username@ridiculouslylong.domain.com</code></p>
<p><strong>Ugh</strong></p>
<p>Using the same username makes life a bit simpler:</p>
<p><code>&nbsp;&nbsp;&nbsp;ssh ridiculouslylong.domain.com</code></p>
<p><strong>Meh</strong>, better, but I&#8217;m <em>really</em> lazy!</p>
<p>I&#8217;d heard about tab-completion for hostnames from various blogs, but never knew how to do it.  I hopped into #debian and thirty seconds later someone had kindly told me about <code><b>~/.ssh/config</b></code></p>
<p>Not only is any host listed in your <code>~/.ssh/config</code> auto-completed on the command line by hitting tab, but you can also specify what username to connect as!  So my .ssh/config file looks something like:</p>
<p><code>Host host1.domain.com<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User randomuser<br />
Host www.somewhereelse.com<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User someotheruser<br />
Host mail.domain2.com<br />
Host domain3.com</code></p>
<p>Now I can just type:<br />
<code>&nbsp;&nbsp;&nbsp;ssh h&lt;TAB&gt;&lt;ENTER&gt;</code><br />
to connect to <em>host1.domain.com</em> as <em>randomuser</em>.</p>
<p><b>Beautiful.</b></p>
<p>Check out <code>man ssh_config</code> for details and other options.</p>
<p>Also, if you&#8217;re not using <a href="http://en.wikipedia.org/wiki/Ssh-agent">ssh keys</a> instead of passwords, you&#8217;re doing too much work.  <a href="http://www.gnome.org/projects/seahorse/">Seahorse</a> makes SSH keys simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schmichael.com/2008/01/30/hostname-tab-completion-for-openssh/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

