왠 케케묵은 OS X 버전이냐고 물을 사람이 있겠다. 새 MacBook을 살 여력이 없어서 슬프니 그런 건 물어보지 마시라. 각설하고… 이미 업데이트가 중단된 OS를 쓴다는 건 위험하므로 취약한 라이브러리나 애플리케이션은 가능하면 업데이트해서 쓰기로 했다.

다음 링크를 참조해 OpenSSH를 업그레이드했다: How to Update OpenSSH on OS X

하지만 다른 머신에서 ssh 연결이 되지 않았다. 그리고 로그가 한 줄 남았다.

fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth]

SSH sandbox error on OS X 10.7.5

뭔가 샌드박스에 문제가 있나보다 싶어 sshd_config 파일을 보다가 한 줄을 수정하니 잘 되더라…

# Default value: sandbox
UsePrivilegeSeparation yes

난 며칠 저녁을 고민해서 찾은 문젠데, 이미 3년 전에 MacPorts 쪽에서는 수정되어 있었다는… 그리고 Homebrew 리파지터리에서 작년에 수정되었다고 보고는 있었지만 패치만 있었고 반영되지 않은 것같다.

그래서 lanchctl 설정과 조금 다르게 파일을 수정해서 사용했다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.openssh.sshd</string>
    <key>Program</key>
    <string>/usr/libexec/sshd-keygen-wrapper</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/sshd</string>
        <string>-i</string>
        <string>-f</string>
        <string>/usr/local/etc/ssh/sshd_config</string>
    </array>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockServiceName</key>
            <string>ssh</string>
            <key>Bonjour</key>
            <array>
                <string>ssh</string>
                <string>sftp-ssh</string>
            </array>
        </dict>
    </dict>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <false/>
    </dict>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
        <key>SHAuthorizationRight</key>
        <string>system.preferences</string>
</dict>
</plist>

그 외에, SSH와 관련한 보안 설정은 나의 SSH 서버 설정을 보시라.

UPDATE(Dec 28, 2015)

StackExchange에 등록된 질문에서 UserPrivilegeSeparation과 관련된 컴파일 힌트를 얻을 수 있다: Building OpenSSH for OS X? – Super User

If find /usr/lib/ -name libsandbox* returns libsandbox.dylib, then you need to include --with-libs="-lsandbox". Its missing on OS X 10.5, but its present on OS X 10.8. If the library is present but --with-libs is omitted, then it will result in an error similar to riemann.local sshd[15748]: fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth].

옵션 값을 yes로 놓는 것보다 sandbox로 하는 것이 훨씬 안전할 듯하다.

Keychain을 이용해 SSH 로그인을 자동화할 수 있는 옵션인 --with-keychain-support와 관련해 homebrew에서 openssh를 담당하는 Dominyk Tiller는 이 기능이 rootless가 강제되는 El Capitan 이후 버전에서는 적용할 수 없는 문제, OpenSSH와 Keychain의 안전을 위협할 수 있다는 점을 들어 패치를 지원하지 않는다: openssh 6.9p1 #482

UPDATE-2(Dec 28, 2015)

Apple이 뭔가 고쳐서 쓰면서 발생한 문제로 보인다: ssh fails: image not found preauch