<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://www.seirios.org/seirios/dokuwiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>ほほほのほ - tweet:2026</title>
        <description></description>
        <link>http://www.seirios.org/seirios/dokuwiki/</link>
        <lastBuildDate>Thu, 20 Aug 2026 02:49:17 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://www.seirios.org/seirios/dokuwiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>ほほほのほ</title>
            <link>http://www.seirios.org/seirios/dokuwiki/</link>
        </image>
        <item>
            <title>macOS LaunchAgent で Thunderbolt NVMe を keepalive する方法（まとめ）</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2026:0706_20260706_1</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;macos_launchagent_で_thunderbolt_nvme_を_keepalive_する方法_まとめ&quot;&gt;macOS LaunchAgent で Thunderbolt NVMe を keepalive する方法（まとめ）&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;macOS LaunchAgent \u3067 Thunderbolt NVMe \u3092 keepalive \u3059\u308b\u65b9\u6cd5\uff08\u307e\u3068\u3081\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;macos_launchagent_\u3067_thunderbolt_nvme_\u3092_keepalive_\u3059\u308b\u65b9\u6cd5_\u307e\u3068\u3081&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-96&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;問題の概要&quot;&gt;問題の概要&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;sudo pmset -a disksleep 0&lt;/code&gt; を実行&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;/Volumes/Home/.keepalive&lt;/code&gt; を作成&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;dd if=/dev/zero of=/Volumes/Home/.keepalive count=1 bs=4096&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; bsはDiskによる。HDDで古いデバイスなら512でも良い。&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; /Volumes/Homeは外付けThnuderbolt SSD&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/bin/keepnvmeawake.sh は以下の通り&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;#dd if=/Volumes/Home/.keepalive of=/dev/null bs=4k count=1 2&amp;gt;/dev/null&lt;/span&gt;
&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;head&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Volumes&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Home&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;.keepalive &lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
この条件下でThunderbolt NVMe 上に置いた keepalive スクリプトを LaunchAgent で定期実行しようとしたところ、
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 手動実行では常に成功（exit 0）&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; LaunchAgent から実行すると exit 126（EX_NOPERM）&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; スクリプトは存在し、実行権限もあり、NVMe は unmount されていない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Gatekeeper の quarantine も削除済み&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 署名を付けても、削除しても改善しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
という状況が発生した。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u554f\u984c\u306e\u6982\u8981&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u554f\u984c\u306e\u6982\u8981&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;97-1118&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;原因&quot;&gt;原因&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
LaunchAgent（launchd）は「実行ファイルの実体がどこにあるか」を安全性判定に使う。
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 内蔵 SSD → 安全な実行元&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 外付け NVMe / USB / Thunderbolt → 安全ではない実行元&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; symlink → リンク先の実体の場所で判定する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
つまり：
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/bin/keepnvmeawake.sh は ~/bin が symlink であるため、Sandboxに弾かれる&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2 node&quot;&gt;&lt;div class=&quot;li&quot;&gt; script 実体は Thunderbolt NVMe 上&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; launchd の sandbox が 「外付けディスク上の実行ファイル」 と判定&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; bash がスクリプトを開く段階で exit 126 を返す&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
ここで重要なのは
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NVMe のデータファイル (.keepalive) は常に読める&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NVMe 上の「実行ファイル」だけが launchd に拒否される&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
という点。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u539f\u56e0&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u539f\u56e0&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1119-1914&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;解決策の原理&quot;&gt;解決策の原理&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
launchd がチェックするのは「実行ファイルの場所」だけであり、スクリプト内部で外付け NVMe を読むことは sandbox の対象外。
&lt;/p&gt;

&lt;p&gt;
よって、
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 実行ファイルだけ内蔵 SSD に置く&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NVMe にアクセスするのは「スクリプト内部の処理」だけにする&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
これが launchd の sandbox を完全に回避する唯一の方法。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u89e3\u6c7a\u7b56\u306e\u539f\u7406&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u89e3\u6c7a\u7b56\u306e\u539f\u7406&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1915-2339&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;最終的な解決策_最もシンプル&quot;&gt;最終的な解決策（最もシンプル）&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
スクリプトを使わず、LaunchAgent から 直接 /usr/bin/head を呼ぶ。
/usr/bin/head は内蔵 SSD にあるため、launchd が安全と判断する。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u6700\u7d42\u7684\u306a\u89e3\u6c7a\u7b56\uff08\u6700\u3082\u30b7\u30f3\u30d7\u30eb\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u6700\u7d42\u7684\u306a\u89e3\u6c7a\u7b56_\u6700\u3082\u30b7\u30f3\u30d7\u30eb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;2340-2563&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;comkeepnvmeawakeplist_最終版&quot;&gt;com.keepnvmeawake.plist（最終版）&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code xml&quot;&gt;&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;encoding&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc0&quot;&gt;&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot;&lt;/span&gt;
&lt;span class=&quot;sc0&quot;&gt;&amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;plist&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;dict&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Label&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;com.keepnvmeawake&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;ProgramArguments&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;array&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/usr/bin/head&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;-c&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;1&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;/Volumes/Home/.keepalive&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/string&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/array&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;StartInterval&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;integer&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;60&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/integer&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;RunAtLoad&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/key&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;true&lt;/span&gt;&lt;span class=&quot;re2&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/dict&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc3&quot;&gt;&lt;span class=&quot;re1&quot;&gt;&amp;lt;/plist&lt;span class=&quot;re2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;com.keepnvmeawake.plist\uff08\u6700\u7d42\u7248\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;comkeepnvmeawakeplist_\u6700\u7d42\u7248&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2564-3176&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;動作確認&quot;&gt;動作確認&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u52d5\u4f5c\u78ba\u8a8d&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u52d5\u4f5c\u78ba\u8a8d&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;3177-3202&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;launchctl&quot;&gt;launchctl&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ launchctl unload ~/Library/LaunchAgents/com.keepnvmeawake.plist
$ launchctl load ~/Library/LaunchAgents/com.keepnvmeawake.plist
$ launchctl list | grep keepnvmeawake&lt;/pre&gt;

&lt;p&gt;
exit code = 1 になることがあるが、これは launchd が「即終了ジョブ」を失敗扱いにする仕様であり、Thunderbolt NVMe の keepalive には影響しない。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;launchctl&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;launchctl&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;3203-3594&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;fs_usage&quot;&gt;fs_usage&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;# sudo fs_usage -f filesystem | grep .keepalive&lt;/pre&gt;

&lt;p&gt;
1分ごとに以下のような I/O が出ていれば 完全に成功：
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;read /Volumes/Home/.keepalive&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;fs_usage&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;fs_usage&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3595-3798&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;exit_code_が_1_になる理由&quot;&gt;exit code が 1 になる理由&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
launchd は「ジョブの最低実行時間」を内部的に持っており、head のような 即終了ジョブは「失敗扱い（exit 1）」になる。
&lt;/p&gt;

&lt;p&gt;
これは 正常挙動であり、keepalive の動作には影響しない。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;exit code \u304c 1 \u306b\u306a\u308b\u7406\u7531&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;exit_code_\u304c_1_\u306b\u306a\u308b\u7406\u7531&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3799-4084&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;最終結論&quot;&gt;最終結論&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; launchd は外付け NVMe 上の「実行ファイル」を拒否する&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; NVMe 上のデータファイルを読むことは拒否しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; よって、実行ファイルだけ内蔵 SSD に置く必要がある&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 最もシンプルな解決策は plist から直接 /usr/bin/head を呼ぶこと&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; fs_usage に I/O が出ていれば Thunderbolt NVMe keepalive は完全に成功&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u6700\u7d42\u7d50\u8ad6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u6700\u7d42\u7d50\u8ad6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;4085-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 05 Jul 2026 16:10:01 +0000</pubDate>
        </item>
        <item>
            <title>ussh（ssh-dss対応）構築手順（Apple Silicon M4）</title>
            <link>http://www.seirios.org/seirios/dokuwiki/doku.php?id=tweet:2026:0707_20260707_01</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;ussh_ssh-dss対応_構築手順_apple_silicon_m4&quot;&gt;ussh（ssh-dss対応）構築手順（Apple Silicon M4）&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;ussh\uff08ssh-dss\u5bfe\u5fdc\uff09\u69cb\u7bc9\u624b\u9806\uff08Apple Silicon M4\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ussh_ssh-dss\u5bfe\u5fdc_\u69cb\u7bc9\u624b\u9806_apple_silicon_m4&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-72&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit2&quot; id=&quot;目的&quot;&gt;目的&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
macOS 標準 ssh の環境を汚染せず、古いネットワーク機器への接続に必要な ssh-dss を利用可能な独立バイナリ ussh を構築する。
&lt;/p&gt;

&lt;p&gt;
今回構築するusshは以下を満たすものとする
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 設定ファイルは ~/.ussh/config&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; known_hosts は ~/.ussh/known_hosts&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ssh は一切使用しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/ssh/ssh_config も参照しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; static link（OpenSSL を make install しない）&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Apple Silicon (arm64) 用&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ussh は ~/bin/ussh に配置&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u76ee\u7684&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u76ee\u7684&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;73-596&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit3&quot; id=&quot;openssl_111wを利用する理由&quot;&gt;OpenSSL 1.1.1wを利用する理由&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; OpenSSL 3.x / 4.x は DSA を完全に削除している&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; OpenSSH 9.x は DSA を OpenSSL に依存して実装している&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; そのため、OpenSSL 3.x / 4.x とリンクすると ssh-dss がビルド時に消滅する&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
結果、OpenSSL 1.1.1 系統しか選択肢がない。
&lt;/p&gt;

&lt;p&gt;
ただし、OpenSSL 1.1.1は2023年9月11日にEoLを迎えているので、今後のUpdateはない。したがって、ssh-dssを利用するdeviceを早期に交換するか、telnetに頼るしかないことに注意。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSL 1.1.1w\u3092\u5229\u7528\u3059\u308b\u7406\u7531&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssl_111w\u3092\u5229\u7528\u3059\u308b\u7406\u7531&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;597-1155&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;必要ディレクトリの作成&quot;&gt;必要ディレクトリの作成&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw2&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; ~&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin
$ &lt;span class=&quot;kw2&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; ~&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;.ussh&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u5fc5\u8981\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u5fc5\u8981\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1156-1258&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;openssl_static_を取得・ビルド&quot;&gt;OpenSSL（static）を取得・ビルド&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSL\uff08static\uff09\u3092\u53d6\u5f97\u30fb\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssl_static_\u3092\u53d6\u5f97\u30fb\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1259-1311&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit6&quot; id=&quot;openssl_111w_を取得&quot;&gt;OpenSSL 1.1.1w を取得&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; ~&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Downloads
$ &lt;span class=&quot;kw2&quot;&gt;wget&lt;/span&gt; https:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;github.com&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssl&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssl&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;releases&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;download&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;OpenSSL_1_1_1w&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssl-1.1.1w.tar.gz
$ &lt;span class=&quot;kw2&quot;&gt;tar&lt;/span&gt; zxf openssl-1.1.1w.tar.gz
$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; openssl-1.1.1w&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSL 1.1.1w \u3092\u53d6\u5f97&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssl_111w_\u3092\u53d6\u5f97&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1312-1532&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit7&quot; id=&quot;openssl_build_static_link_library_make_install_しない&quot;&gt;OpenSSL build static link library（make install しない）&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ .&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Configure darwin64-arm64-cc no-shared
$ &lt;span class=&quot;kw2&quot;&gt;make&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
生成物：
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ./libcrypto.a&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ./libssl.a&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ./include/openssl/*&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSL build static link library\uff08make install \u3057\u306a\u3044\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssl_build_static_link_library_make_install_\u3057\u306a\u3044&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1533-1744&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;openssh_portable_を取得&quot;&gt;OpenSSH Portable を取得&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; ~&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Downloads
$ &lt;span class=&quot;kw2&quot;&gt;wget&lt;/span&gt; https:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;cdn.openbsd.org&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;pub&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;OpenBSD&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;OpenSSH&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;portable&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssh-9.7p1.tar.gz
$ &lt;span class=&quot;kw2&quot;&gt;tar&lt;/span&gt; zxf openssh-9.7p1.tar.gz
$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; openssh-9.7p1&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSH Portable \u3092\u53d6\u5f97&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssh_portable_\u3092\u53d6\u5f97&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;1745-1953&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;ssh_ussh_に置換するパッチ適用&quot;&gt;~/.ssh → ~/.ussh に置換するパッチ適用&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
OpenSSH は設定ファイルの検索パスをソースコードにハードコードしているため、以下のファイルを修正する。
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;~\/.ssh \u2192 ~\/.ussh \u306b\u7f6e\u63db\u3059\u308b\u30d1\u30c3\u30c1\u9069\u7528&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ssh_ussh_\u306b\u7f6e\u63db\u3059\u308b\u30d1\u30c3\u30c1\u9069\u7528&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;1954-2164&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit10&quot; id=&quot;pathnamesh_の修正&quot;&gt;pathnames.h の修正&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;vi&lt;/span&gt; pathnames.h&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;
- #define SSHDIR                          ETCDIR &amp;quot;/ssh&amp;quot;
+ #define SSHDIR                          &amp;quot;~/ussh&amp;quot;

- #define _PATH_SSH_PROGRAM               &amp;quot;/usr/bin/ssh&amp;quot;
+ #define _PATH_SSH_PROGRAM               &amp;quot;/usr/bin/ussh&amp;quot;

- #define _PATH_SSH_USER_DIR &amp;quot;.ssh&amp;quot;
+ #define _PATH_SSH_USER_DIR &amp;quot;.ussh&amp;quot;&lt;/pre&gt;

&lt;p&gt;
これにより
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ssh は一切参照しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ussh/config を自動で読む&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ussh/known_hosts を使用&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/ssh/ssh_config は無視&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
となる
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;pathnames.h \u306e\u4fee\u6b63&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pathnamesh_\u306e\u4fee\u6b63&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;2165-2716&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;openssh_を_static_link_でビルド&quot;&gt;OpenSSH を static link でビルド&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; ~&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Downloads&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssh-9.7p1
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;OPENSSL_SRC&lt;/span&gt;=&lt;span class=&quot;re1&quot;&gt;$HOME&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Downloads&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;openssl-1.1.1w
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;CFLAGS&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;-I&lt;span class=&quot;es2&quot;&gt;$OPENSSL_SRC&lt;/span&gt;/include&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;LDFLAGS&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;-L&lt;span class=&quot;es2&quot;&gt;$OPENSSL_SRC&lt;/span&gt; -lcrypto -lssl&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OpenSSH \u3092 static link \u3067\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;openssh_\u3092_static_link_\u3067\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;2717-2955&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit12&quot; id=&quot;configure_不要機能を削除&quot;&gt;configure（不要機能を削除）&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;.&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;configure \
  &lt;span class=&quot;re5&quot;&gt;--with-ssl-dir&lt;/span&gt;=&lt;span class=&quot;re1&quot;&gt;$OPENSSL_SRC&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;configure\uff08\u4e0d\u8981\u6a5f\u80fd\u3092\u524a\u9664\uff09&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configure_\u4e0d\u8981\u6a5f\u80fd\u3092\u524a\u9664&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;2956-3066&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit13&quot; id=&quot;ビルド&quot;&gt;ビルド&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ make ssh
$ cp ./ssh ~/bin/ussh&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u30d3\u30eb\u30c9&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:8,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;3067-3134&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;ussh_の設定ファイル作成&quot;&gt;ussh の設定ファイル作成&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ vi ~/.ussh/config&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;ussh \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ussh_\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;3135-3216&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit15&quot; id=&quot;この構成で満たされる要件&quot;&gt;この構成で満たされる要件&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ssh を一切使用しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ussh/config を自動で読む&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ~/.ussh/known_hosts を使用&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /etc/ssh/ssh_config を参照しない&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; static link（OpenSSL を make install しない）&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Apple Silicon 用&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ssh-dss が利用可能&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ussh は ~/bin/ussh に配置&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; System の ssh を汚染しない&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u3053\u306e\u69cb\u6210\u3067\u6e80\u305f\u3055\u308c\u308b\u8981\u4ef6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u3053\u306e\u69cb\u6210\u3067\u6e80\u305f\u3055\u308c\u308b\u8981\u4ef6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;3217-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 07 Jul 2026 14:15:01 +0000</pubDate>
        </item>
    </channel>
</rss>
