{"id":533,"date":"2021-01-29T20:16:17","date_gmt":"2021-01-30T04:16:17","guid":{"rendered":"https:\/\/beyan.me\/?p=533"},"modified":"2022-04-04T18:57:48","modified_gmt":"2022-04-05T02:57:48","slug":"script-for-port-forwarding-on-macos","status":"publish","type":"post","link":"https:\/\/norvyn.com\/?p=533","title":{"rendered":"Script for Port Forwarding on MacOS"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n#\n#\nif &#91;&#91; \"$1\" == '' || \"$2\" == '' || \"$3\" == '' ]]; then\n\techo -e \"Usage:\"\n\techo -e \"  $0 &#91;local port to forward] &#91;target address] &#91;target port]\"\n\techo -e \"\\nCTRL-C for clear all configured port forwarding.\"\n\texit 127\nfi\n#\n# Config for local port forward\nlocalSSHPort=22\nlocalUser=`echo $USER`\nfromPort=$1\ntargetAddr=$2\ntargetPort=$3\n# Seconds for check the status of port forward\nloopTime='30'\n# Start SSH Server for localhost\n# sudo systemsetup -setremotelogin on\nsudo launchctl start system\/sshd\n# Find IP address for local enthernet\nipAddrs=`ifconfig | grep -v inet6 | grep inet | awk '{print $2}'`\nifconfig | grep -v inet6 | grep inet | awk '{print $2}'\necho -e \"\\nEnter '1..n' to choose one: \\c\"\nread index4ip\n&#91;&#91; $index4ip -eq '' ]] &amp;&amp; index4ip='2'\nlocAddr=`echo $ipAddrs | awk '{print $'$index4ip'}'`\necho \"IP you choosen: $locAddr\"\n# Config for SSH login localhost without password\nisAuthFilexist=`ls -l ~\/.ssh | grep authorized_keys > \/dev\/null; echo $?`\nisPubKeyexist=`ls -l ~\/.ssh | grep id_rsa.pub > \/dev\/null; echo $?`\n&#91;&#91; $isAuthFilexist -eq '0' ]] &amp;&amp; echo \"SSH authorized file exist: YES\"\nif &#91;&#91; $isPubKeyexist -ne '0' ]]; then\n\techo \"Generate SSH public key.\"\n\tssh-keygen -t rsa -P ''\nelse\n\techo \"Public key file exist: YES\"\n\techo -e \"Check if the public key is included in file 'authorized_keys': \\c\"\n\t# isKeyinFile=`grep -R \"\\\"\\`cat ~\/.ssh\/id_rsa.pub\\`\\\"\" ~\/.ssh\/authorized_keys > \/dev\/null; echo $?`\n\tisKeyinFile=`grep -R \"\\`cat ~\/.ssh\/id_rsa.pub\\`\" ~\/.ssh\/authorized_keys > \/dev\/null; echo $?`\n\tif &#91;&#91; $isKeyinFile -eq '0' ]]; then\n\t\techo -e \"YES\"\n\telse\n\t\tcat ~\/.ssh\/id_rsa.pub >> ~\/.ssh\/authorized_keys\n\t\techo -e \"FIXED\"\n\tfi\nfi\nwhile true\ndo\n# Program for local port $fromPort forward to $targetPort of $targetAddr\n# Check if the $fromPort is already used\nisPortUsed=`netstat -an | grep $fromPort > \/dev\/null; echo $?`\nif &#91;&#91; $isPortUsed -ne '0' ]]; then\n\techo \"$fromPort is not used, start port forward\"\n\tssh -fNn -L $locAddr:$fromPort:$targetAddr:$targetPort $localUser@127.0.0.1 -p $localSSHPort\n\tif &#91;&#91; $? -eq '0' ]]; then\n\t\techo -e \"\\nPort: $fromPort forward done!\"\n\t\tprompt='y'\n\telse\n\t\techo \"Port forward failed!! Waiting for next loop!!\"\n\tfi\nelse\n\techo -e \"\\nPort: $fromPort already used!\"\n\tif &#91;&#91; $prompt != 'y' ]]; then\n\t\techo -e \"\\nCheck port forwarding status only, \\c\"\n\t\techo -e \"Enter 'y', Or other key to exit: \\c\"\n\t\tread prompt\n\t\t&#91;&#91; $prompt != 'y' ]] &amp;&amp; exit 128\n\tfi\nfi\n# Show connection via port forwarded.\necho -e \"-----------------------\"\necho -e \"Connected host: \"\nnetstat -an | grep $fromPort | grep -v \"*.*\" | awk '{print $5}'\n# End of port forward\n#\n# trap 'continue' SIGINT\ntrap 'break' SIGINT\nsleep $loopTime\ndone\necho -e \"\\n\\nStop SSH Service: \\c\"\n# sudo systemsetup -setremotelogin off\nsudo launchctl stop system\/sshd\necho -e \"OK\"\necho -e \"\\nClear all configured port forwarding: \\c\"\nkillall ssh\necho -e \"OK\"\necho -e \"\\nStart SSH Service: \\c\"\n# sudo systemsetup -setremotelogin on\nsudo launchctl start system\/sshd\necho -e \"OK\"\nexit 0\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-56b4198f-eecb-4bec-85ab-c7c54333dc4c\" href=\"https:\/\/norvyn.com\/wp-content\/uploads\/2021\/02\/portForward4MacOS.sh_.tar\">portForward4MacOS.sh_<\/a><a href=\"https:\/\/norvyn.com\/wp-content\/uploads\/2021\/02\/portForward4MacOS.sh_.tar\" class=\"wp-block-file__button\" download aria-describedby=\"wp-block-file--media-56b4198f-eecb-4bec-85ab-c7c54333dc4c\">Download<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,11],"tags":[],"class_list":["post-533","post","type-post","status-publish","format-standard","hentry","category-macos_apple_pc","category-shell"],"_links":{"self":[{"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/posts\/533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/norvyn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=533"}],"version-history":[{"count":1,"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/posts\/533\/revisions"}],"predecessor-version":[{"id":4362,"href":"https:\/\/norvyn.com\/index.php?rest_route=\/wp\/v2\/posts\/533\/revisions\/4362"}],"wp:attachment":[{"href":"https:\/\/norvyn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/norvyn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/norvyn.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}