Ex-Major Frank McCloud (Humphrey Bogart) arrives at the Hotel Largo in Key Largo, Florida, where he meets the proprietors James Temple (Lionel Barrymore) and Nora Temple (Lauren Bacall). James Temple was the father-in-law of widow Nora Temple. George Temple was Nora Temple's husband and James Temple's son. George died in Italy, during WWII, where he was in Frank's unit. Due to the lateness of the season, and because of an approaching hurricane, the hotel is nearly empty, with only five guests: the dapper Toots (Harry Lewis), the boorish Curly (Thomas Gomez), stone-faced Ralph (William Haade), servant Angel (Dan Seymour), and an attractive woman, Gaye Dawn (Claire Trevor), who has a drinking problem. They claim to have come down to the Florida Keys for a fishing trip with a mysterious sixth man who spends all his time in his room upstairs.
Rebuffing Curly's attempts to engage him in conversation, Frank meets with Nora and Mr. Temple and tells them where Temple's son George is buried and of his heroism under fire overseas. Nora, in particular, seems taken with Frank, who she says her husband wrote about frequently. The three begin preparing the hotel for the coming hurricane, but are interrupted by Sheriff Ben Wade (Monte Blue) and his deputy, Sawyer (John Rodney), who are looking for the Osceola brothers, a pair of Native Americans who escaped from custody after being arrested on minor charges. Temple promises the lawmen that he will use his influence with the local Indians to get the boys to surrender. Soon after the police leave, the local Seminoles show up seeking shelter at the hotel.
With the storm coming on, Curly, Ralph, Angel and Toots pull guns and take the Temples and Frank hostage. They reveal the sixth member of their party as being their boss, notorious gangster Johnny Rocco (Edward G. Robinson), who had been exiled to Cuba some years before for being an undesirable alien. The gang had discovered Sawyer looking about and knocked him unconscious. As they are held at gunpoint, Mr. Temple lets go a stream of insults toward Rocco, who responds by taunting Temple, explaining how he will one day return to prominence. At one point Rocco gives Frank a pistol and offers to fight a duel with him, but Frank declines, stating that he believes in self-preservation over heroics and that "one Rocco more or less isn't worth dying for." Sawyer grabs the gun and tries to escape but is shot and killed by Rocco, after which it is discovered that the gun Rocco gave Sawyer was not loaded.
Rocco intends to hold the Temples and Frank hostage until his American contacts arrive to conclude a deal. As the storm rages, the Seminoles, usually sheltered in the hotel in storms, huddle outside as Rocco and his company worry about storm damage and insist the Indians stay outside. Rocco forces Gaye, his ex-moll, to sing for them and then berates her for her poor performance and fading looks. Nora reveals to Frank that she knows that the story he told earlier about her husband's heroism was false and that Frank was the real hero. Mr. Temple invites Frank to come live with them at the hotel, a prospect that seems to intrigue Nora.
After the storm subsides, Ben Wade shows up looking for Sawyer, who had telephoned from the hotel before the hurricane. Mr. Temple is forced by Rocco to lie and say he hasn't seen him, but as Wade is leaving he discovers Sawyer's corpse floating in the water nearby (two of Rocco's men had taken his body into deeper water and thrown it overboard). Rocco lies and blames the killing on the Osceola brothers, who Wade confronts and kills.
After Wade leaves, Rocco's contact Ziggy (Marc Lawrence) arrives to carry out the deal. Rocco sells Ziggy a large amount of counterfeit money and then forces Frank, who has skills as a seaman, to take him and his henchmen back to Cuba on a small boat belonging to the hotel (the luxurious yacht they arrived on was taken out to deep water to escape damage in the storm by its skipper, despite threats from Rocco). Nora and Gaye try to convince Frank to make a break for safety once he is outside the hotel, but he agrees to take the men to Cuba. Gaye appears to make a last-ditch attempt to convince Rocco to take her with him and uses the embrace to steal Rocco's gun, which she passes to Frank surreptitiously. Out on the ocean, Frank manages to knock Ralph overboard and then kills the other gangsters, receiving a minor wound himself. He radios for help and pilots the boat back to Key Largo, much to the delight of Nora."